我正在使用PhoneGap应用程序,该应用程序使用相机捕获图像,然后上传它们。 PhoneGap中的摄像头有两种操作模式:raw base64编码数据或文件URI。
文档本身说:
注意:较新时使用相机拍摄的照片的图像质量 设备非常好。使用Base64编码此类图像已导致 某些设备上的内存问题(iPhone 4,BlackBerry Torch 9800)。因此,使用FILE_URI作为'Camera.destinationType'是 强烈推荐。
所以我热衷于使用FILE_URI选项。这很好用,您甚至可以在IMG标签中显示图像。 URL如下所示:
文件://localhost/var/mobile/Applications/4FE4642B-944C-449BB-9BD6-1E442E47C7CE/tmp/photo_047.jpg
但是,稍后我想读取要上传到服务器的文件内容。我打算使用FileReader类型执行此操作。这不起作用,我认为这是因为我无法访问上面的URL文件。
我从readDataUrl返回的错误代码是1> FileError.NOT_FOUND_ERR = 1;
我有什么想法可以访问该文件?我试着根据我看到的另一个样本访问路径的最后一部分(photo_047.jpg),但没有运气。
答案 0 :(得分:1)
我刚刚开始使用PhoneGap,考虑到这个问题的年龄,你可能已经找到了答案,但我还是试一试。
首先,您是否可以使用内置的 FileTransfer 对象?它需要 file: URI作为参数。
如果 FileTransfer 不适合您,并且您需要自己阅读文件数据,那么您需要PhoneGap 文件对象,例如正如你所说, FileReader 。但是大多数人都希望使用普通的路径名 - 而不是URI - 来指定要使用的文件。您获取NOT_FOUND_ERR的原因是因为它试图打开名为 file:/ localhost / var ... 的文件。
这是一个快速的单行程序,用于从URI中提取路径部分:
var path = /file:\/\/.*?(\/.*)/.exec(fileuri)[1];
希望这有帮助!
答案 1 :(得分:1)
jgarbers的答案对我有帮助,但它没有解决问题。我意识到相机将照片存储在Temp文件夹而不是Document文件夹中。将我的本地文件系统设置为临时文件允许它找到相机图像的正确位置。
window.requestFileSystem(LocalFileSystem.TEMPORARY, 0, ...
答案 2 :(得分:0)
...
window.requestFileSystem(LocalFileSystem.TEMPORARY,0,...
...
var path = / file://。?(/。)/.exec(fileuri)[1];
参考。以上jgarbers和Rik答案(解决方案已在iOs 7上成功测试)
答案 3 :(得分:0)
您可以使用文件传输插件将任何文件上传到服务器。
//// pass your file uri to the mediafie param
function uploadFile(mediaFile) {
var ft = new FileTransfer();
path = mediaFile.fullPath;
name = mediaFile.name;
////your service method url
var objUrl = http://example.com;
ft.upload(path,
objUrl,
function (result) {
alert("Success");
},
function (error) {
alert('Error uploading file ' + path + ': ' + error.code);
},
{ fileName: name });
}