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