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上传文件问题
294浏览 • 1回复 待解决
HarmonyOS 上传文件相关Demo
322浏览 • 1回复 待解决
HarmonyOS web组件上传文件
77浏览 • 1回复 待解决
HarmonyOS日志文件上传问题
390浏览 • 1回复 待解决
HarmonyOS web上传文件和图片
108浏览 • 1回复 待解决
HarmonyOS 文件上传 & 资源读取问题
313浏览 • 1回复 待解决
HarmonyOS 文件上传服务器问题
218浏览 • 1回复 待解决
这个swipe事件怎么啊?
9656浏览 • 2回复 待解决
NEXT网络请求如何上传文件
1925浏览 • 1回复 待解决
js开发上传文件路径问题
6097浏览 • 2回复 待解决
救命,鸿蒙怎么动画啊
5647浏览 • 2回复 待解决
鸿蒙的promise要怎么
7268浏览 • 3回复 待解决
怎么实现后台上传图片?
2254浏览 • 1回复 待解决
怎么单元测试用例?
2030浏览 • 1回复 待解决
上传文件后,如何接受后端返回数据
1754浏览 • 1回复 待解决
Web组件如何实现文件上传功能?
296浏览 • 1回复 待解决