我正在开发一个基于phonegap的应用程序,它具有文件传输功能。我正在使用phonegap相机插件来选择图像文件。该代码适用于'DestinationType.DATA_URL'。但我无法使用'DestinationType.FILE_URI'访问该文件。
DestinationType.DATA_URL只提供图像文件内容。但我必须得到图像文件名称和文件路径及其内容。所以我必须在相机选项中使用'DestinationType.FILE_URI'。以下是我的代码,
function attachFile() {
var pictureSource=navigator.camera.PictureSourceType;
var cameraOptions = { quality: 49 , destinationType:
Camera.DestinationType.FILE_URI, sourceType: pictureSource.PHOTOLIBRARY };
navigator.camera.getPicture(attachSuccess, attachFail, cameraOptions);
}
function attachSuccess(fileuri) {
filePath = JSON.stringify(fileuri);
console.log("FilePath: "+filePath );
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);
}
function attachFail() {
console.log("attach failed");
}
function gotFS(fileSystem) {
console.log("gotFS:");
var root = "/"+fileSystem.root.name;
console.log("root: "+root);
filePath = filePath .substring(filePath.indexOf(root));
var imageName = filePath.substring(filePath.lastIndexOf('/'));
var type = imageName.substring(filePath.indexOf('.'));
fileSystem.root.getFile(filePath, null, gotFileEntry, fail);
}
function fail() {
console.log("** failed **");
}
function gotFileEntry(fileEntry) {
console.log("got file entry");
fileEntry.file(gotFile, fail);
}
function gotFile(file) {
console.log("got file");
}
当我调用'attachFile'功能时,Get Picture窗口打开&我可以选择图像文件。然后执行attachSuccess回调函数。但是我无法使用FILE URI访问该文件。 FILE URI打印如下,
内容://媒体/外部/图像/媒体/ 5490
我想知道如何从这个URI中获取'文件名'或'文件对象'。请建议。 (在Android Kitkat& Lollipop中测试的代码)
答案 0 :(得分:1)
您可以使用Cordova的FileSystem API。这是一个如何加载图像文件的快速示例:
window.resolveLocalFileSystemURL(filePath, // The file path
function(fileEntry) { // found the file
fileEntry.file(function(f) { // got the file
var reader = new FileReader();
reader.onloadend = function(evt) {
var fileContent = reader.result;
// Do something with the fileContent
someImage.attr("src", fileContent); // Example
}
reader.readAsDataURL(f); // TODO find a way to read it straight to the right format (if there is any)
}, function(e) { // cannot open file
console.log("Error opening file: " + e.message);
});
},
function(e) { // file not found
console.log("Error finding file: " + e.message);
});
fileContent
字符串包含'data:'
+ base64编码的字符串。
您还可以使用f
变量来获取文件名。
参考文献:
https://developer.mozilla.org/en-US/docs/Web/API/FileReader.readAsDataURL
https://github.com/apache/cordova-plugin-file/blob/master/doc/index.md
答案 1 :(得分:0)
您获得的URI是本机URI。尝试从cameraOptions中删除destinationType字段,因为插件默认为FILE_URI。
如果这不起作用,请将destinationType的值设为1。
我在猜测Camera.DestinationType对象是以某种方式混淆的。
P.S。如果您的最终目标是上传照片,请尝试使用cordova-plugin-file-transfer。
答案 2 :(得分:0)