Cordova 每隔一张图片的Phonegap文件传输失败:FileTransfer上载错误代码3

Cordova 每隔一张图片的Phonegap文件传输失败:FileTransfer上载错误代码3,cordova,phonegap-plugins,Cordova,Phonegap Plugins,我自己回答了这个问题,因为我花了很长时间才找到解决方案,而且没有很好的文档记录 在尝试使用android上的应用程序将图像上传到远程服务器时,每次交替上传文件时,我都会收到错误代码3。 它工作了一次,但当我再次尝试时,它会立即抛出一个错误,甚至不会将文件发送到服务器 我用于文件上传的代码是: 使其工作的关键是添加一个标题选项。 options.headers = { Connection: "close" } options.chunkedMode = false

我自己回答了这个问题,因为我花了很长时间才找到解决方案,而且没有很好的文档记录

在尝试使用android上的应用程序将图像上传到远程服务器时,每次交替上传文件时,我都会收到错误代码3

它工作了一次,但当我再次尝试时,它会立即抛出一个错误,甚至不会将文件发送到服务器

我用于文件上传的代码是:

使其工作的关键是添加一个标题选项。

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

完整代码:

var options = new FileUploadOptions();

                        options.fileKey="file";
                        options.fileName=imageURI.substr(imageURI.lastIndexOf('/')+1);
                        options.mimeType="image/jpeg";
                        options.chunkedMode = false;
                        *options.headers = {
                           Connection: "close"
                        };*

                        // setup parameters
                        var params = {};
                        params.fullpath =imageURI;
                        params.name = options.fileName;



                        var ft = new FileTransfer();

                        ft.upload(imageURI, encodeURI(url+'/account/profile-pics'), win, fail, options);


 function win(r) {
                  //file uploaded successfully
                }
            function fail(error) {


                alert("An error has occurred: Code = " + error.code);
                alert("upload error source " + error.source);
                alert("upload error target " + error.target);
            }

错误代码3是一个相当广泛的错误;这基本上意味着您的服务器编码不正确,或者您没有internet连接,这会导致连接错误

这可能意味着:

  • 服务器上没有安装多部分插件。在PHP中设置“file_uploads=On”(在PHP.ini中),在ExpressJS中需要Multer中间件插件(),等等
  • 文件上载大于服务器允许的大小-这导致状态代码413错误,并显示消息“请求实体太大”。要在PHP上解决此问题,您需要调整PHP.ini中的
    upload\u max\u filesize
    设置;要在ExpressJS上解决此问题,您需要调整Multer的
    limit
    字段等。基本上,增加服务器上的文件上载大小。大多数服务器限制文件上载大小作为安全措施。()
  • 选项.fileKey
    值(即
    )不是服务器期望的名称-示例错误消息可能是“意外字段”
  • 标题中的
    内容类型
    字段没有
    多部分/表单数据的值;边界=----WebKitFormBoundary
    。在服务器上记录请求头可用于检查内容类型是否设置正确
  • 照片上传与文件传输 @AugieGardner-也同意Cordova文件传输插件没有很好的文档记录,无法上传使用相机插件拍摄的照片

    幸运的是,我有一个iOS的工作示例(我猜也是Android):

    照片上传无需文件传输 一个更简单的替代方案(或回退方案)是将图像编码为Base64,并通过普通的旧AJAX POST请求发送它。这包括以下优点和缺点

    通过AJAX发送的Base64编码图像的缺点

  • 您可能需要增加服务器上的请求限制大小,以避免出现413个错误(即“请求实体太大”)
  • Base64图像比二进制图像大37%,这很可能导致上传速度减慢
  • 可能不适用于视频或其他文件类型
  • 通过AJAX发送Base64编码图像的优势

  • 更小的应用程序大小(更快的应用程序下载),因为Cordova的文件传输插件,可能还有Cordova的文件插件不会增加应用程序的开销
  • 当您将应用扩展到新的操作系统(如iOS、Android等)时,您不必修复文件传输插件错误
  • 您可能不需要服务器上的多部分服务(或中间件)来上载图像

  • phonegap没有更好地记录这一点,这非常令人沮丧。您的解决方案对我很有效,谢谢。我收到这个错误(错误代码3),因为apache服务器上php模块上配置的文件大小小于我作为请求的一部分发布的大小。一旦我增加了限制,它就为我修复了。当互联网断开连接时,错误代码3也会出现。我在最初成功后收到此错误。一次成功,然后在页面刷新之前不再工作。上面的答案在我使用iOS时不起作用。在我的情况下,我必须添加一个授权头,因为服务器需要一个令牌,然后它就工作了。