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

Posted

技术标签:

【中文标题】其他图片的Phonegap文件传输失败:FileTransfer上传的错误代码3【英文标题】:Phonegap File Transfer of picture fails on every other picture: Error code 3 with FileTransfer upload 【发布时间】:2013-10-09 14:44:44 【问题描述】:

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

【问题讨论】:

【参考方案1】:

在尝试使用 FileTransfer() 将图像从 android 上的 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);
            

【讨论】:

这非常令人沮丧,因为 phonegap 没有更好地记录这一点。您的解决方案对我有用,谢谢。 我收到此错误(错误代码 3),因为在 apache 服务器上的 php 模块上配置的文件大小小于我作为请求的一部分发布的文件大小。一旦我增加了限制,它对我来说是固定的。 网络断开时也会出现错误代码 3。 我在初次成功后收到此错误。一次成功,然后在页面刷新之前永远不会再次工作。上面的答案对我使用 ios 无效。 在我的例子中,我不得不添加一个 Authorization 标头,因为服务器需要一个令牌,然后它就可以工作了。【参考方案2】:

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

可能的意思:

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

通过文件传输上传照片

@AugieGardner - 同样同意 Cordova 文件传输插件没有很好地记录上传使用相机插件拍摄的照片。

幸运的是,我有一个适用于 iOS 的示例(我猜 Android 也是如此):cordova file transfer plugin not working in ios simulator

无需文件传输即可上传照片

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

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

    您可能需要增加服务器上的请求限制大小,以免出现 413 错误(即“请求实体太大”)。 Base64 图像比二进制图像大 37%,这很可能导致上传速度变慢。 可能不适合视频或其他文件类型。

通过 AJAX 发送 Base64 编码图像的优势

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

【讨论】:

以上是关于其他图片的Phonegap文件传输失败:FileTransfer上传的错误代码3的主要内容,如果未能解决你的问题,请参考以下文章

Phonegap - iOS 文件传输不适用于授权标头

Phonegap 图片上传失败,权限被拒绝

传输文件时出现错误导致接收失败,文件可能被其他程序占用或已经损坏

Vsftp应用传输文件

在 Phonegap 应用程序中使用文件传输插件

Cordova / Phonegap 设备到设备文件传输