9

我正在将图片上传到服务器。我能够使用 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="*"/>

我错过了什么吗?

谢谢

4

8 回答 8

7

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

var options = new FileUploadOptions();
options.chunkedMode = false;
options.headers = {
      Connection: "close"
   };
于 2015-11-10T09:40:24.250 回答
5

添加代码:

var op;
op = new FileUploadOptions();

op.headers = {
    Connection: "close"
};

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

于 2013-10-09T09:28:28.427 回答
2

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

var options = FileUploadOptions();
options.chunkedMode = false;
于 2012-09-06T12:42:31.943 回答
2

这些是我用来克服这个问题的步骤:

添加了以下选项:

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

但更重要的是我使用 Genymotion 作为模拟器进行测试。无法将图像上传到本地主机,因为模拟器在虚拟机中运行,本地主机意味着虚拟机的本地主机,而不是 Web 服务器的本地主机。

因此,您不应上传到“localhost”,而应上传到:

http://10.0.2.2 

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

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

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

于 2014-11-11T06:40:37.390 回答
0

这是 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);
于 2013-09-07T05:12:28.343 回答
0

我已经向 Telerik 询问了我在使用 AppBuilder 时遇到的这个问题。根据他们的回复,这可能是 Cordova 中的一个错误(我使用的是 3.2)。

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

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

于 2014-03-19T10:26:04.337 回答
0

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

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

CFNetwork SSLHandshake iOS 9 失败

于 2015-09-14T08:43:58.717 回答
-1

您可以尝试以下任一方法:

android:debuggable="true"在文件的<application>标签中设置AndroidManifest.xml

设置<access origin=".*"/>而不是*评论部分中建议的设置,如下所示:

<!-- <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 -->
于 2012-08-17T19:09:00.260 回答