【问题标题】:Reading image capture files in PhoneGap在 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),但没有运气。

【问题讨论】:

    标签: javascript iphone ios cordova


    【解决方案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 });
          }
          

          【讨论】:

            猜你喜欢
            • 2011-10-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多