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)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
分享
微博
QQ
微信
回复
2024-08-12 19:37:21
相关问题
上传文件接口报错 ,该怎么处理啊?
1566浏览 • 1回复 待解决
HarmonyOS 上传文件问题
762浏览 • 1回复 待解决
HarmonyOS 录音上传文件
889浏览 • 1回复 待解决
HarmonyOS上传文件问题
1228浏览 • 1回复 待解决
HarmonyOS 如何上传文件
939浏览 • 1回复 待解决
HarmonyOS反射该怎么
559浏览 • 1回复 待解决
HarmonyOS 文件上传无法解析文件地址
887浏览 • 1回复 待解决
HarmonyOS 上传文件的demo
852浏览 • 1回复 待解决
HarmonyOS axios上传文件失败
841浏览 • 1回复 待解决
HarmonyOS web组件上传文件
951浏览 • 1回复 待解决
HarmonyOS 文件上传报错
1056浏览 • 1回复 待解决
HarmonyOS 上传文件相关Demo
1359浏览 • 1回复 待解决
HarmonyOS 文件上传入参设置
521浏览 • 1回复 待解决
HarmonyOS 文件上传 & 资源读取问题
1551浏览 • 1回复 待解决
HarmonyOS 文件上传HEADER如何配置
628浏览 • 1回复 待解决
HarmonyOS request文件上传问题
784浏览 • 1回复 待解决
HarmonyOS web上传文件和图片
892浏览 • 1回复 待解决