本帖最后由 云象智能科技有限公司 于 2021-9-6 12:36 编辑
使用fs模块拷贝从微信分享的文件,当文件名是中文的情况下,返回null,英文或者数字的文件名正常
测试手机:华为 Mate40 Pro,鸿蒙系统【老款的华为手机测试正常】
if (api.systemType === 'android' && ret.data) {
var filename = decodeURI(ret.data); //从微信返回的content:// 协议的路径,中文文件名,decodeURI解码
// var filename = ret.data; //如果不转码,ajax无法上传文件
var name = filename.split(".");
var ext = name[name.length - 1];
ext = ext.toLowerCase(ext);
if (ext == "pdf" || ext == "xls" || ext == "xlsx" || ext == "doc" || ext == "docx") {
var fs = api.require('fs');
var retCoyp = fs.copyToSync({
oldPath: filename,
newPath: "fs://../../Inbox/"
});
showAlert(retCoyp);
// var retRename = fs.renameSync({
// oldPath: "fs://../../Inbox/" + filename,
// newPath: "fs://../../Inbox/" + decodeURI(filename)
// });//备注:尝试拷贝时不转换,拷贝成功后修改文件名,测试结果是拷贝成功,改名返回成功,但是未生效
if (retCoyp.status) {
showAlert("文件拷贝成功,请在附件选择中查看");
}
功能背景:
需要将微信中的文件,分享到App中,作为附件上传
文件名都是中文,知道附件的文件是做什么用的,比如“项目需求.doc”,"需求清单.xsl"
以上代码,将微信分享过来的文件,拷贝到fs某目录下,app读取目录,选择附件上传。
问题说明:
1、使用老款华为手机测试正常,附件能正常上传
2、使用最新的华为手机,鸿蒙系统,文件拷贝不成功,返回值为null
3、系统报错,错误信息为“Cannot read property ‘status’of null ”,showAlert显示retCoyp为“null”
分析:无论拷贝是否成功,至少应该有返回值,现在返回值为null,说明模块内部报错导致没有返回值
以上代码使用decodeURI(ret.data),将微信返回的路径“content://.....%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90%E5%8A%9F%E8%83%BD%E6%B8%85%E5%8D%95.xls”转换为“content://.....数据分析功能清单.xls”
保存到fs某目录下
data:content://com.tencent.mm.external.fileprovider/external/Android/data/com.tencent.mm/MicroMsg/Download/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90%E5%8A%9F%E8%83%BD%E6%B8%85%E5%8D%95.xlsx at index.html : 248
decodeURI:content://com.tencent.mm.external.fileprovider/external/Android/data/com.tencent.mm/MicroMsg/Download/数据分析功能清单.xlsx at index.html : 251
更换了个方案问题已经解决了,被这个问题折腾了好久。
|