在 PhoneGap 中读取图像捕获文件
Posted
技术标签:
【中文标题】在 PhoneGap 中读取图像捕获文件【英文标题】:Reading image capture files in PhoneGap 【发布时间】:2011-10-31 03:04:57 【问题描述】:我正在开发一个 PhoneGap 应用程序,该应用程序使用相机捕获图像,然后上传它们。 PhoneGap 中的摄像头有两种操作模式:原始 base64 编码数据或文件 URI。
文档自己说:
注意:使用较新的相机拍摄的照片的图像质量 设备相当不错。使用 Base64 编码此类图像会导致 其中一些设备(iPhone 4、BlackBerry Torch)上的内存问题 9800)。因此,使用 FILE_URI 作为 'Camera.destinationType' 是 强烈推荐。
所以我热衷于使用 FILE_URI 选项。这很好用,您甚至可以在 IMG 标签中显示图像。网址如下所示:
file://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),但没有运气。
【问题讨论】:
【参考方案1】:我刚刚开始使用 PhoneGap,考虑到这个问题的年龄,你可能已经找到了答案,但无论如何我都会尝试一下。
首先,您可以使用内置的 FileTransfer 对象吗?它需要一个 file: URI 作为参数。
如果 FileTransfer 不适合您,而您需要自己读取文件数据,则需要 PhoneGap File 对象,例如 FileReader ,正如你所说。但大多数人希望使用普通路径名——而不是 URI——来指定要使用的文件。您收到 NOT_FOUND_ERR 的原因是因为它试图打开一个名为 file:/localhost/var... 的文件。
这是从您的 URI 中提取路径部分的快速单行代码:
var path = /file:\/\/.*?(\/.*)/.exec(fileuri)[1];
希望这会有所帮助!
【讨论】:
【参考方案2】:jgarbers 的回答对我有帮助,但并没有解决问题。我意识到相机将照片存储在 Temp 文件夹而不是 Document 文件夹中。将我的本地文件系统设置为临时允许它找到相机图像的正确位置。
window.requestFileSystem(LocalFileSystem.TEMPORARY, 0, ...
【讨论】:
【参考方案3】:...
window.requestFileSystem(LocalFileSystem.TEMPORARY, 0, ...
...
var path = /file://.?(/.)/.exec(fileuri)[1];
参考。以上 jgarbers 和 Rik 答案(解决方案已在 ios 7 上成功测试)
【讨论】:
【参考方案4】:您可以使用文件传输插件将任何文件上传到服务器。
//// 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 );
【讨论】:
以上是关于在 PhoneGap 中读取图像捕获文件的主要内容,如果未能解决你的问题,请参考以下文章
sencha + Phone Gap中的相机应用程序[关闭]