其他图片的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的主要内容,如果未能解决你的问题,请参考以下文章