Phonegap文件传输的图片在其他图片上失败:错误代码3与FileTransfer上传

问题描述:

我自己回答了这个问题,因为我花了很长时间才找到解决方案,而且没有很好的记录。Phonegap文件传输的图片在其他图片上失败:错误代码3与FileTransfer上传

虽然试图用FileTransfer()对机器人从一个phonegap应用上传图像传输到远程服务器我一直得到一个错误代码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); 
      } 
+0

这是非常令人沮丧的是,这不是由phonegap更好地记录。您的解决方案为我工作,谢谢。 –

+1

我得到这个错误(错误代码3),因为Apache服务器上的php模块上配置的文件大小比我作为请求的一部分发布的小。一旦我增加了限制,它是固定的我。 –

+1

当互联网断开连接时,还会出现错误代码3。 –

错误代码3是一个相当宽的误差;它基本上意味着您的服务器编码不正确或者您没有互联网连接,并且导致连接错误。

可能意味着:

  1. 您没有安装在服务器上的多插件。在PHP中设置“file_uploads = On”(在PHP.ini中),在ExpressJS中,您需要Multer中间件插件(https://www.npmjs.com/package/multer)等。
  2. 文件上传大于您的服务器允许的数量 - 导致状态错误代码413,其中“请求实体太大”的消息。为了解决这个问题,你需要调整php.ini中的upload_max_filesize设置,为了解决这个问题,你需要调整Multer等的limit字段。基本上,增加服务器上的文件上传大小。大多数服务器将文件上传大小限制为安全措施。 (https://www.owasp.org/index.php/Unrestricted_File_Upload
  3. options.fileKey值(即<input type="file" name="fileKey" />)不是您的服务器期望的名称 - 示例错误消息可能是“意外字段”。
  4. 表头中的content-type字段没有值multipart/form-data; boundary=----WebKitFormBoundary。记录服务器上的请求标头,可用于检查内容类型是否设置正确。

上传照片与文件传输

@AugieGardner - 也一致认为,科尔多瓦文件传输的插件是不是有据可查上传用相机插件拍摄的照片。

幸运的是,我有iOS的工作示例(和我的猜测是Android的为好):
cordova file transfer plugin not working in ios simulator

上传照片没有文件传输

一个简单的替代(或回退),将将图像编码为Base64,并通过简单的旧AJAX POST请求发送它。其中包括以下优点和缺点。Base64编码的

缺点编码发送的AJAX图片

  1. 您可能需要增加服务器上的请求限制大小,这样你就不会得到413个错误(即“请求实体太大”) 。
  2. Base64图像比二进制图像大大约37%,这很可能会导致上传速度变慢。
  3. 可能不适用于视频或其他文件类型。 Base64编码的

优势编码发送过来AJAX

  1. 小应用程序的大小(和更快的应用程序下载)的图像,因为科尔多瓦的文件传输插件,并可能科尔多瓦的文件插件不会给应用程序添加开销。
  2. 当您将应用扩展到新的操作系统(即iOS,Android等)时,您无需修复文件传输插件错误。
  3. 您可能不需要服务器上的多部分服务(或中间件)来上传图像。