Phonegap android无法使用fileTransfer上载图像
我正在尝试使用相机捕捉图像并将其上传到AJAX端点。我已经确认该端点可以接受该文件(我在桌面上创建了一个测试HTML文件,该文件发送一个包含图像的表单)。我正在使用Cordova(phonegap)1.7.0,并试图让fileTransfer()正常工作。以下是我遵循的文档链接: 成功回调将触发,但在端点上找不到$\u文件数据 然后我发现了这篇文章: 建议使用Phonegap android无法使用fileTransfer上载图像,android,cordova,Android,Cordova,我正在尝试使用相机捕捉图像并将其上传到AJAX端点。我已经确认该端点可以接受该文件(我在桌面上创建了一个测试HTML文件,该文件发送一个包含图像的表单)。我正在使用Cordova(phonegap)1.7.0,并试图让fileTransfer()正常工作。以下是我遵循的文档链接: 成功回调将触发,但在端点上找不到$\u文件数据 然后我发现了这篇文章: 建议使用options.chunkedMode=false。现在上传需要一年半的时间,最终失败,错误代码为3,我认为这是FileError.A
options.chunkedMode=false
。现在上传需要一年半的时间,最终失败,错误代码为3,我认为这是FileError.ABORT\u ERR
我错过什么了吗
以下应用程序中的我的代码:
navigator.camera.getPicture(function(imageURI){
console.log('take success! uploading...');
console.log(imageURI);
var options = new FileUploadOptions();
options.fileKey = 'file';
options.fileName = 'spot_image.jpeg';
options.mimeType = 'image/jpeg';
var params = new Object();
params.spot_id = 1788;
params.param2 = 'something else';
options.params = params;
options.chunkedMode = false;
var ft = new FileTransfer();
ft.upload(imageURI,serverURL + '/ajax.php?fname=appuploadspotimage',function(r){
console.log('upload success!');
console.log(r.responseCode);
console.log(r.response);
console.log(r.bytesSent);
},function(error){
console.log('upload error')
console.log(error.code);
},options,true);
console.log('after upload');
},function(message){
console.log('fail!');
console.log(message);
},{
quality: 50,
destinationType: navigator.camera.DestinationType.DATA_URL,
sourceType: navigator.camera.PictureSourceType.PHOTOLIBRARY
});
serverURL
被定义为我的AJAX端点的域,它已在cordova.xml中被列为白名单
关于这一点,我在这里看到了许多问题,对于是否应该使用chunkedMode,有不同的意见。有人也有这个问题吗
我正在运行ICS的三星Galaxy S上尝试这个
愿帮助我解决这个问题的人神秘地继承一家啤酒厂 您不能在FileTransfer上载方法中使用从摄像头成功回调中获得的imageUri,您必须首先将uri解析为如下文件名:
navigator.camera.getPicture(function(imageURI){
window.resolveLocalFileSystemURI(imageUri, function(fileEntry) {
fileEntry.file(function(fileObj) {
var fileName = fileObj.fullPath;
//now use the fileName in your method
//ft.upload(fileName ,serverURL + '/ajax.php?fname=appuploadspotimage'...);
});
});
});
在有点困惑之后,我觉得你可以直接使用图像uri 请看我的答案:(这对我在android上很有用):
你能在你的服务器上检查一下它收到了什么post参数吗?我遇到了一个类似的问题,最终发现发生的事情是我没有发送options对象correctly@davids您的意思是检查服务器中的
$\u POST
变量吗?我试过了,得到了一个空数组。我也尝试使用$\u REQUEST
进行检查,但只有我在url中提供的fname
参数存在<代码>$\u文件显示一个空数组。嘿,这里是DZL。我不再实际使用这个应用程序了,但是谢谢你的代码!我将保存此代码段,并在再次遇到此代码段时尝试一下。谢谢:)我将你的答案标记为已接受。没问题,我最近也在努力解决这个问题,我花了很多时间才弄明白。这个答案对其他人(包括我:)非常有用,谢谢这应该是resolveLocalFileSystemURL
(而不是URI)?和/或,情况有变吗?@DZL我也面临类似的问题,但无法解决。你能检查一下这个问题吗?也许他们在新的cordova版本中修复了它,自动将uri转换为文件名,但在“cordova-2.2.0.js”中,我使用的是我可以上传文件,但我无法在服务器上打开它。打开该文件的唯一方法是首先调用“window.resolveLocalFileSystemURI”,然后使用从“resolveLocalFileSystemURI”返回的文件名传输它。好的,可能就是这样!