HarmonyOS鸿蒙Next中request.upload文件uri不支持internal://app

HarmonyOS鸿蒙Next中request.upload文件uri不支持internal://app cke_278.png

查阅api 6 的开发文档之后发现request.upload中uri参数仅支持internal临时目录。我的应用场景中使用JS camera组件进行拍摄,参考了官方提供的教程和社区一位大神的帖子之后,拍摄保存的图片路径为internal://app/cache_images/IMG_20230924_103257169.jpg。请问这样的路径如何通过request.upload进行上传?是需要进行文件拷贝工作还是进行某种转换?


更多关于HarmonyOS鸿蒙Next中request.upload文件uri不支持internal://app的实战教程也可以访问 https://www.itying.com/category-93-b0.html

9 回复

要不你考虑考虑换api9?

更多关于HarmonyOS鸿蒙Next中request.upload文件uri不支持internal://app的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


这边没有能运行API9的真机。唉。

你这是,毕设么?上远程真机呀,

哈哈,参加一个比赛,远程真机的话现场答辩不太方便感觉。我这边已经处理好这个问题了,将图片进行Base64编码,等下发个帖子分享一下踩坑经验。

// 获取应用文件路径 let context = getContext(this) as common.UIAbilityContext; let cacheDir = context.cacheDir;

try { let PhotoSelectOptions = new picker.PhotoSelectOptions(); PhotoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE; PhotoSelectOptions.maxSelectNumber = 5; let photoPicker = new picker.PhotoViewPicker(); photoPicker.select(PhotoSelectOptions).then((PhotoSelectResult) => { this.img = PhotoSelectResult.photoUris[0]; //注意 这里时datashare 而上传图片路径需要时 dataability 。 datashare:/media/image/98 this.imgDatas = PhotoSelectResult.photoUris; //读取上面返回uri let file = fs.openSync(this.img, fs.OpenMode.CREATE); // 复制文件到缓存目录下 fs.copyFileSync(file.fd, cacheDir + ‘/test.jpeg’) //开始上传文件------------------------------------------------------------- let file1 = { filename: “68”, name: “file”, uri: ‘internal://cache/test.jpeg’, type: “jpeg” }; //这里是从缓存路径获取文件对象 let data1 = { name: “id”, value: “1” }; let header = { key1: ‘Content-Type’, key2: ‘multipart/form-data’, Token: “tokenValue”, Authorization: “AuthorizationValue” }; let uploadTask; let uploadConfig = { url: ‘http://x.x.x.x:1111/uploadSingleFile’, header: header, method: “POST”, files: [file1], data: [data1], }; try { request.uploadFile(context, uploadConfig).then((data) => { // this.btnLabel = ‘文件上传成功’ uploadTask = data; console.info('xx Success to request the upload. Cause: ’ + JSON.stringify(data)); // uploadTask = data; uploadTask.on(‘complete’, (taskStates) => { for (let i = 0; i < taskStates.length; i++) { console.info(xx upload complete taskState: ${JSON.stringify(taskStates[i])}); } }); }).catch((err) => { console.error('Failed to request the upload. Cause: ’ + JSON.stringify(err)); }); } catch (err) { console.error('err.code : ’ + err.code + ', err.message : ’ + err.message); } // 结束上传文件------------------------------------------------------------- console.info('PhotoViewPicker.select successfully, PhotoSelectResult uri: ’ + JSON.stringify(PhotoSelectResult)); }).catch((err) => { console.error('PhotoViewPicker.select failed with err: ’ + err); }); } catch (err) { console.error('PhotoViewPicker failed with err: ’ + err); }

对不起,由于您提供的内容中并没有包含任何HTML代码,因此无法进行转换。请提供包含HTML代码的具体内容以便进行转换。

感觉这种方法只能临时用,要上传到其他比如服务器目录,不然重新安装之后,可能文件就没了。

在HarmonyOS鸿蒙Next中,request.upload接口用于文件上传操作。根据帖子标题,request.upload文件URI不支持internal://app路径。internal://app是鸿蒙系统中的应用内部存储路径,通常用于访问应用私有目录下的文件。request.upload接口可能仅支持特定类型的URI,如file://路径或外部存储路径。开发者需确保上传文件的URI符合接口要求,避免使用不支持的路径类型。

在HarmonyOS鸿蒙Next中,request.upload 文件 URI 不支持 internal://app 路径。这是因为 internal://app 是应用内部私有目录,通常用于存储应用的私有数据,无法直接通过 HTTP 请求上传。建议使用 external:// 路径或将文件复制到临时目录后再上传。确保文件路径可访问且权限正确,以避免上传失败。

回到顶部