在 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 中读取图像捕获文件的主要内容,如果未能解决你的问题,请参考以下文章

图像未显示在 Phone Gap 应用程序中

使用 phonegap 连续拍摄图像

Phonegap 摄像头控制

sencha + Phone Gap中的相机应用程序[关闭]

如何通过绝对路径访问我的应用程序文件 - windows phone - Phonegap/Cordova

将图像保存在本地存储phonegap中