HarmonyOS文件上传怎么写

从相册里已经拿到了路径了:file://media/Photo/6/IMG_1712626998_005/screenshot_20240409_094137.jpg,然后网络请求框架用的axios,然后不知道怎么把这个路径转成file去上传,axios框架里说是用arrayBuffer,和uri (internal://cache)这种类型,这种uri不知道怎么获取,arrayBuffer我按照文档上的去转换,貌似转出来是个空的,不知道能否提供一个选择文件之后开始上传文件的demo呢?

HarmonyOS
2024-08-12 15:50:11
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Heiang
// 获取到相册选择图片的URI 
const PERMISSIONS: Array<Permissions> = [ 
  'ohos.permission.READ_MEDIA', 
  'ohos.permission.WRITE_MEDIA' 
]; 
let context = getContext(this) as common.UIAbilityContext 
let atManager = abilityAccessCtrl.createAtManager(); 
await atManager.requestPermissionsFromUser(context,PERMISSIONS) 
const photoSelectOption = new picker.PhotoSelectOptions() 
photoSelectOption.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE 
photoSelectOption.maxSelectNumber = 2 
const photoViewPicker = new picker.PhotoViewPicker 
photoViewPicker.select(photoSelectOption).then(async (photoSelectResult) => { 
  this.uris = photoSelectResult.photoUris 
}).catch((err: BusinessError) => { 
  console.info('Invoke photoViewPicker.select failed, code is ${err.code},message is ${err.message}'); 
}) 
axios上传类型支持uri和ArrayBuffer 
// 转化为internal://cache 
fs.open( this.uris[0], fs.OpenMode.READ_ONLY).then((file) => { // READ_ONLY READ_WRITE 
  let newPath = this.context.cacheDir + `/test.png`; 
  fs.copyFile(file.fd, newPath).then(() => { 
    console.info("applog:copy file succeed"); 
    let realUri = "internal://cache/"+newPath.split("cache/")[1]; 
    console.log('realUri'+JSON.stringify(realUri)) 
  }).catch((err:BusinessError) => { 
    console.info("applog:copy file failed with error message: " + err.message + ", error code: " + err.code); 
  }); 
}).catch((err:BusinessError) => { 
  console.info("applog:open file failed with error message: " + err.message + ", error code: " + err.code); 
}) 
// 转化为Arraybuffer 
let file = fs.openSync(this.uris[0], fs.OpenMode.READ_ONLY) 
const imageSource = image.createImageSource(file.fd); 
fs.closeSync(file) 
const imagePackApi = image.createImagePacker() 
let packOpts: image.PackingOption = { format: "image/png", quality: 100 } 
imagePackApi.packing(imageSource, packOpts) 
  .then(readBuffer => { 
    let bufferArr = new Uint8Array(readBuffer); 
    console.log('bufferArr'+JSON.stringify(bufferArr)) 
  }) 
let file = fs.openSync(uris[0], fs.OpenMode.READ_ONLY); 
let file2 = fs.openSync(this.filesDir + '/test.jpg', fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE); 
fs.copyFileSync(file.fd, file2.fd);//先创建有读写权限的文件,再把不可读写的文件复制过来 
fs.closeSync(file); fs.closeSync(file2)
分享
微博
QQ
微信
回复
2024-08-12 19:37:21
相关问题
HarmonyOS上传文件问题
355浏览 • 1回复 待解决
HarmonyOS 上传文件相关Demo
379浏览 • 1回复 待解决
HarmonyOS web组件上传文件
151浏览 • 1回复 待解决
HarmonyOS日志文件上传问题
448浏览 • 1回复 待解决
HarmonyOS 文件上传 & 资源读取问题
354浏览 • 1回复 待解决
HarmonyOS web上传文件和图片
149浏览 • 1回复 待解决
HarmonyOS 文件上传服务器问题
251浏览 • 1回复 待解决
这个swipe事件怎么啊?
9667浏览 • 2回复 待解决
js开发上传文件路径问题
6135浏览 • 2回复 待解决
NEXT网络请求如何上传文件
1962浏览 • 1回复 待解决
怎么实现后台上传图片?
2283浏览 • 1回复 待解决
文件上传的本地路径如何获取
286浏览 • 1回复 待解决
救命,鸿蒙怎么动画啊
5674浏览 • 2回复 待解决
鸿蒙的promise要怎么
7308浏览 • 3回复 待解决
怎么单元测试用例?
2044浏览 • 1回复 待解决
上传文件后,如何接受后端返回数据
1804浏览 • 1回复 待解决