来自Cordova相机的Javascript文件对象的CreateObjectUrl
CreateObjectUrl of Javascript file object from Cordova camera
在我们的应用程序中,用户可以附加图像,它们将保存在本地以供以后上传。我们需要能够显示附加图像的缩略图。
对于 Android,我们使用 File_Uri 从 Cordova 相机插件中检索图像,并将 javascript File 对象存储在本地数据库中。但是,当我尝试使用窗口显示该图像的缩略图时。URL.createObjectURL(( 在该 File 对象上,它失败并显示"类型错误"。
当使用用户附加到文件输入的文件时,这在桌面浏览器上工作正常,但由于某种原因,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。
PhoneGap 文件插件(许多其他插件的依赖项,包括相机(用自己的实现替换了本机File
实现。此替换不是 Blob
的实例(不继承自(,因此 createObjectURL
方法失败,正如您发现的那样。
您可以使用File
的localURL
字段来获取适合<img>
标签的内容,但在您的情况下,这将有点循环。在调用resolveLocalFileSystemURL
之前,我会设置您的缩略图:
navigator.camera.getPicture(function (fileUrl) {
// just grab this here
dataUrl = fileUrl;
window.resolveLocalFileSystemURL(fileUrl, function (fileEntry) {
fileEntry.file(function (file) {
// Do your other work here
// ...
});
});
}, function (error) {
alert(error);
}, {
quality: 40,
destinationType: Camera.DestinationType.FILE_URI,
sourceType: Camera.PictureSourceType.CAMERA,
encodingType: Camera.EncodingType.JPEG,
saveToPhotoAlbum: false
});
我认为window.URL
是特定于Firefox的。试试window.webkitURL
- 引用对象中的通用值
- jQuery匹配JSON对象的部分文本
- 节点导出返回一个空对象
- 如何在Javascript中将JSon对象转换为数组
- 我可以在json对象中添加一个函数吗
- 使用JS将数组转换为json对象
- 全局变量和全局对象的属性之间有什么区别吗
- 比较从函数和生成的日期对象
- Javascript,访问一个主要对象模块模式中的每个对象
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 调整窗口大小时,可拖动的对象会出现在容器外部
- 如何使用javascript从主svg对象动态创建svg视图框
- 如何使用json将对象列表从java转换为javascript
- 序列化数据属性中对象的最可靠方法
- 如何访问声音管理器2创建的声音对象
- FabricJs-限制主对象内添加对象的移动区域
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 值对象在某个变量发生更改后发生更改
- 如何为json对象中的段发送array[]
- 使用createObject (google maps)在coldfusion查询中创建java脚本对象