当Android中的图像文件名包含空格时,Phonegap的getPicture方法失败

3

我正在使用最新版本的PhoneGap相机插件(即0.2.9)和PhoneGap Build 3.5,正在Android上进行测试,下面是获取图像的代码:

navigator.camera.getPicture(uploadPhoto,
       function(message) { console.log('get picture failed');alert(message) },
                         { quality: 50, targetWidth: 400, targetHeight: 400,
                           destinationType: navigator.camera.DestinationType.FILE_URI,
                           sourceType: navigator.camera.PictureSourceType.PHOTOLIBRARY }
);

当我选择文件名没有空格的图片时(例如test.jpg),uploadPhoto方法可以成功调用,但是当我选择文件名带有空格的图片(test 2.jpg)时,会出现错误并显示警告消息“无法创建位图”。


但是要编码哪一部分?我尝试了destinationType: encodeURI(navigator.camera.DestinationType.FILE_URI),仍然不起作用 @frank - Venice Leung
你需要对文件名进行编码(包含空格的字符串)。 - frank
因此,我不知道在哪里对文件名进行编码,因为当它抛出错误时,“uploadPhoto”从未被调用。@frank - Venice Leung
1
@VeniceLeung 你好 Venice,你能解决这个问题吗?我遇到了完全相同的问题,似乎是 phonegap/cordova 的一个 bug。谢谢! - DevD
1
我也遇到了同样的问题,你解决了吗? - Zahema
显示剩余3条评论
2个回答

0
我的解决方案是升级到最新版本(5.1.1)。

0
使用JavaScript的encodeURI()函数对路径进行编码。
这将以标准规范接受的格式给出文件路径。但是,常见于文件名中的'('和')'并未被该函数处理。
然而,通过在encodeURI函数后面添加2个JavaScript字符串replace()方法来替换它们为它们的原始URL编码等效项应该可以解决这个问题。

var success = function(path) {
  var urlEncodedPath = encodeURI(path)
    .replace('(', '%28')
    .replace(')', '%29');
  document.getElementById("demo").innerHTML = urlEncodedPath;
  // do something
};

// Actual success callback from cordova camera
// navigator.camera.getPicture(success, fail, options);

// An Example for demonstating in browser
success('file:///storage/emulated/0/Android/data/com.your.app/cache/hd wallpaper nature(1).jpg');
<p id="demo" style="word-wrap: break-word;"></p>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接