我正在使用Phonegap制作一个应用程序,用户可以在其中选择和共享文件。当用户选择它时,即使它离线或关闭应用程序,我也应该将它上传回服务器,所以我需要存储参考文件路径。
我所用的步骤:
mimeType,然后用新的名称和扩展名将文件复制到myApp的文件夹中。mimeType并返回。每当用户选择媒体文件时,将文件复制到另一个位置是正确的吗?
var obj = {
destinationType: navigator.camera.DestinationType[fromCamera ? 'FILE_URI' : 'NATIVE_URI'],
// If I use NATIVE_URI for when taking from Camera it returns null.
sourceType: navigator.camera.PictureSourceType[fromCamera ? 'CAMERA' : 'PHOTOLIBRARY'],
mediaType: navigator.camera.MediaType[image ? 'PICTURE' : 'VIDEO']
}, that = this;
if (image && fromCamera) {
obj.correctOrientation = true;
obj.quality = 40;
}
return new Promise(function (resolve, reject) {
navigator.camera.getPicture(function (url) {
var fail = function () {
resolve(false);
}
window.setTimeout(function () {
// mimeType uses window.resolveLocalFileSystemURL to get fileEntry
that.mimeType(url).then(function (mimeObj) {
/*
mimeObj contains object like below
{lastModified:'', fileType:'', fileExtension:'', name : ''}
*/
if (mimeObj) {
// that.fileSystem() resolves fileSystem
that.fileSystem().then(function (fs) {
// dirName is where I want to store all myApp's media files.
var dirName = 'myApp/media/' + (image ? "images" : "videos") + '/';
that.getFile(url).then(function (fileEntry) {
// getFile uses window.resolveLocalFileSystemURL and returns fileEntry
that.moveTo(fs, fileEntry, dirName, mimeObj.name).then(function (entry) {
// MoveTo fill copy the same file to directory where I am manintaing files.
mimeObj.localURL = entry.nativeURL;
/*
mimeObj is failing to find extension
when user selects it from different albums. But not when user uses Camera.
So I am making again mimeType call.
*/
that.mimeType(mimeObj.localURL).then(function (mimeObj) {
// This gives me exact mimeObj that I need.
resolve(mimeObj);
});
}, fail);
}, fail);
}, fail);
} else {
resolve(false);
}
});
}, 0);
}, function (fail_message) {
window.setTimeout(function () {
reject(fail_message);
}, 0);
}, obj);
});发布于 2014-09-26 20:11:52
有趣的问题,
当然,用图片的副本来填满记忆是不好的。尤其是最近的这个丑闻,被删除的图片一直困扰着用户。
从阅读代码中可以看出,无论您是否具有扩展名和MIME类型,都需要获取文件的副本。至少只有在你没有别的办法的情况下才能复制。
此外,从文档(我可能是错的)中,FileEntry对象有一个名为file的方法,它创建一个File对象,该对象具有一个type属性,该属性是文件的mime类型。这能解决你的难题吗?如果这样做不起作用,您应该看看是否可以提交一个bug。
从真正的代码审查的角度来看,这是我的第一次快速介绍:
'use strict'吗?https://codereview.stackexchange.com/questions/63759
复制相似问题