我正在尝试通过FileTransfer.upload方法上传使用设备相机拍摄的图像,并且我一直在给FILE_NOT_FOUND_ERR
。我通过PhoneGap Build使用Cordova 2.2.0。
我正在拍照并将其保存到localStorage(通过Backbone):
navigator.camera.getPicture(
(file_uri) =>
params.file_uri = file_uri
params.is_image = 1
collection.create params
(message) ->
U.Alert "Failed: #{message}"
options
)
然后尝试上传该图片:
file_uri = @get('file_uri')
transferOpts = new FileUploadOptions
transferOpts.fileKey = 'attachment'
transferOpts.fileName = file_uri.substr file_uri.lastIndexOf('/') + 1
transferOpts.chunkedMode = false
transfer = new FileTransfer
transfer.upload(file_uri, @url(), success, error, transferOpts)
有了这个,FileTransfer的error
回调总是抛出以下内容:
{
code: 1,
http_status: 411,
source: "content://media/external/images/media/8416",
target: "https://mywebapp.com/api/endpoint"
}
代码1是PhoneGap的FILE_NOT_FOUND_ERR
响应代码。但我已验证该设备上存在该文件。首先,我可以在屏幕上显示file_uri
作为图像。其次,我可以通过Weinre调试器检索图像文件的内容,如下所示:
var reader = new FileReader();
reader.onloadend = function(e) {
console.log('Read as data URL');
console.log(e.target.result);
};
reader.readAsDataUrl(file_uri);
记录的data:image/jpeg;base64
响应是正确的图像。
现在,我甚至尝试手动解析URI,就像我在一个StackOverflow问题中看到的那样:
resolveLocalFileSystemURI file_uri, (fileEntry) => fileEntry.file (fileObj) =>
transferOpts = new FileUploadOptions
transferOpts.fileKey = 'attachment'
transferOpts.fileName = fileObj.name
transferOpts.chunkedMode = false
transfer = new FileTransfer
transfer.upload(fileObj.fullPath, @url(), success, error, transferOpts)
在这种情况下,fileObj.fullPath
会解析为:/mnt/sdcard/Android/data/com.COMPANY.APPNAME/cache/1359412873161.jpg
而仍没有运气。在这一点上,我确信这是一个我不知道的蠢事!
答案 0 :(得分:1)
我有类似的问题,并通过使用格式为“file://”
的源uri解决