来自Cordova相机的Javascript文件对象的CreateObjectUrl

时间:2015-05-29 22:09:58

标签: javascript android cordova

在我们的应用程序中,用户可以附加图像,它们将保存在本地以便以后上传。我们需要能够显示附加图像的缩略图。

对于Android,我们使用File_Uri从Cordova相机插件中检索图像,并将javascript File对象存储在本地数据库中。但是,当我尝试使用该File对象上的window.URL.createObjectURL()显示该图像的缩略图时,它会因“类型错误”而失败。

当使用用户附加到文件输入的文件时,这在桌面浏览器上工作正常,但由于某种原因,Cordova在Android上提供给我们的文件无效。

我知道我可以将其更改为使用FileReader并且它确实以这种方式工作,但这需要更改与我们的Windows和Web html5应用程序共享的一堆其他代码(此处未显示),因此我们希望如果可能的话,避免改变方法。

以下是代码的精简版:

navigator.camera.getPicture(function (fileUrl) {
    window.resolveLocalFileSystemURL(fileUrl, function (fileEntry) {
        fileEntry.file(function (file) {
            // Save File
            // ...

            // Get DataUrl of image
            dataUrl = window.URL.createObjectURL(file);
        });
    });
}, function (error) {
    alert(error);
}, {
    quality: 40,
    destinationType: Camera.DestinationType.FILE_URI,
    sourceType: Camera.PictureSourceType.CAMERA,
    encodingType: Camera.EncodingType.JPEG,
    saveToPhotoAlbum: false
});

从相机和相册中检索到的图像失败。我在这里做错了吗?调试器显示文件对象是Javascript File对象(这是我们想要的),但由于某种原因它无法创建对象url。

2 个答案:

答案 0 :(得分:2)

PhoneGap文件插件(许多其他插件的依赖项,包括摄像头)用自己的替换本地File实现。此替换不是Blob的实例(不继承),因此createObjectURL方法失败,因为您发现。

您可以使用localURL的{​​{1}}字段来获取适合File标记的内容,但在您的情况下可能会有点圆形。我在调用<img>之前设置了缩略图:

resolveLocalFileSystemURL

答案 1 :(得分:-1)

我认为window.URL是特定于Firefox的。试试window.webkitURL