在我们的应用程序中,用户可以附加图像,它们将保存在本地以便以后上传。我们需要能够显示附加图像的缩略图。
对于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。
答案 0 :(得分:2)
PhoneGap文件插件(许多其他插件的依赖项,包括摄像头)用自己的替换本地File
实现。此替换不是Blob
的实例(不继承),因此createObjectURL
方法失败,因为您发现。
您可以使用localURL
的{{1}}字段来获取适合File
标记的内容,但在您的情况下可能会有点圆形。我在调用<img>
之前设置了缩略图:
resolveLocalFileSystemURL
答案 1 :(得分:-1)
我认为window.URL
是特定于Firefox的。试试window.webkitURL