Phonegap 的 FileTransfer.upload() 在 Android 上抛出错误代码 3

Posted

技术标签:

【中文标题】Phonegap 的 FileTransfer.upload() 在 Android 上抛出错误代码 3【英文标题】:Phonegap's FileTransfer.upload() throwing error code 3 on Android 【发布时间】:2012-07-31 19:25:31 【问题描述】:

我正在将图片上传到服务器。我能够使用 ios 成功上传图像,但是当我尝试使用 android 时,我得到错误代码 3。目前使用 phonegap cordova 1.8.1。

我已经尝试在参数中添加 true

upload(filePath, server, successCallback, errorCallback, options, **true**);

并添加这个

options.chunkedMode = false;

我的 AndroidManifest 文件包含:

<uses-permission android:name="android.permission.INTERNET" />

我的 cordova.xml 文件包含:

<access origin="*"/>

我错过了什么吗?

谢谢

【问题讨论】:

我在 iOS 上也有同样的错误代码,请问您是如何解决问题的? 错误码含义: 1 = FileTransferError.FILE_NOT_FOUND_ERR 2 = FileTransferError.INVALID_URL_ERR 3 = FileTransferError.CONNECTION_ERR 4 = FileTransferError.ABORT_ERR 5 = FileTransferError.NOT_MODIFIED_ERR 【参考方案1】:

问题可能不在Phonegap 中。如果服务器是基于 Windows 的服务器,请尝试使用另一台服务器。另外,不要忘记添加这些行:

var options = new FileUploadOptions();
options.chunkedMode = false;
options.headers = 
      Connection: "close"
   ;

【讨论】:

这适用于我在窗口服务器机器上的 php Web 服务。非常感谢 经过几个小时的尝试,这对我在 Windows 机器上的 Ruby webserver (Roda) 有效。谢谢! 我需要chunkedMode,但Connection: "close" 标头对我有用。谢谢!【参考方案2】:

添加代码:

var op;
op = new FileUploadOptions();

op.headers = 
    Connection: "close"
;

添加后 - 代码开始运行良好,没有错误。 更详细的描述:http://grandiz.com/phonegap-development/phonegap-file-transfer-error-code-3-solved 希望对您有所帮助!

【讨论】:

【参考方案3】:

这也发生在我身上。您应该指定chunkedMode=false (http://***.com/questions/8522729/phonegap-filetransfer-upload-fails-on-android)

var options = FileUploadOptions();
options.chunkedMode = false;

【讨论】:

抱歉,禁用分块模式没有帮助。【参考方案4】:

这些是我用来解决这个问题的步骤:

添加了以下选项:

options.chunkedMode = false;
options.headers = 
      Connection: "close"
   ;

但更重要的是我使用 Genymotion 作为模拟器进行测试。无法将映像上传到 localhost,因为模拟器在 VM 中运行,而 localhost 表示 VM 的 localhost,而不是 Web 服务器的 localhost。

所以不要上传到'localhost',你应该上传到:

http://10.0.2.2 

并将以下行添加到您的 config.xml:

<access origin="10.0.2.2" subdomains="true"/>

我对它进行了测试,它的工作原理就像一个魅力。不过,我花了 3 天时间才完成这项工作。

【讨论】:

Connection: "close" 标头对我有用。谢谢!【参考方案5】:

这是 phonegap 库中的一个未修复的错误,因为没有修复错误,我不得不通过我的工作来解决它(基本上在每次替代失败时重新上传):

ft.upload(path,
          encodeURI("http://yourdomain.com/upload.php"),
            function(result) 
                alert("Uploaded");
            ,
            function(error) 
                ft.upload(path,
                encodeURI("http://yourdomain.com/upload.php"),
                function(result) 
                    alert("Uploaded");                  
                ,
                function(error) 
                    alert("Error uploading image");
                ,
                 fileName: name, fileKey: "file", mimeType: "image/jpeg", chunkedMode: false , true);     
            ,
             fileName: name, fileKey: "file", mimeType: "image/jpeg", chunkedMode: false , true);

【讨论】:

没有解决我的问题,为此苦苦挣扎了一周。还有其他建议吗?【参考方案6】:

我已经向 Telerik 询问了我在使用 AppBuilder 时遇到的这个问题。根据他们的回复it might be a bug in Cordova(我使用的是3.2)。

他们建议更新到 latest FileTransfer library(同时更新所有依赖项),看看是否能解决您的问题。实际上,我在编译新库时遇到了另一个问题。

我建议您尝试一下,看看是否适合您。

【讨论】:

【参考方案7】:

这也可能是一个原因,并为我解决了:

iOS 9 和 OSX 10.11 要求您计划从中请求数据的所有主机都使用 TLSv1.2 SSL,除非您在应用的 Info.plist 文件中指定异常域。

(CFNetwork SSLHandshake failed iOS 9)

【讨论】:

【参考方案8】:

您可以尝试以下任何一种:

AndroidManifest.xml 文件的&lt;application&gt; 标记中设置android:debuggable="true"

设置&lt;access origin=".*"/&gt; 而不仅仅是*,因为它在 cmets 部分中建议如下:

<!-- <access origin="https://example.com" /> allow any secure requests to example.com -->
<!-- <access origin="https://example.com" subdomains="true" /> such as above, but including subdomains, such as www -->
<!-- <access origin=".*"/> Allow all domains, suggested development use only -->

【讨论】:

以上是关于Phonegap 的 FileTransfer.upload() 在 Android 上抛出错误代码 3的主要内容,如果未能解决你的问题,请参考以下文章

小白学phoneGap《构建跨平台APP:phoneGap移动应用实战》连载一(PhoneGap中的API)

Phonegap : 浮动气泡通知,如 Phonegap 中的 facebook messenger

phonegap build + phonegap-cli + ionic 图标

PhoneGap - Android - 在 phonegap 中滑动导航

PhoneGap / Cordova 回调错误 - 在 PhoneGap 中未执行 RestKit 完成功能

phonegap 2.2 和 facebook 集成