鸿蒙APP 上传文件到阿里云OSS

之前公司的移动端项目都是使用阿里云的OSS对象存储,最近公司开发鸿蒙版的APP,对于这部分的功能还是准备使用OSS ,但是阿里云并没有提供相关的sdk ,只提供了一个临时性的解决方案:阿里云OSS客户端直传

实现这个功能的前提条件是必须有服务端支撑,需要服务端请求阿里云接口获取临时上传所需的参数,然后返回给客户端,再由客户端发起提交。

阿里云一共提供了三种方式, 最开始服务端给我提供的是第三种,但是经过一番折腾,这一条路没有走通。偶然在鸿蒙社区发现了一个帖子使用第二种方式成功,然后赶紧让服务端改为提供第二种方式,经过一番调试,最终上传成功了。社区中的帖子

第二种方式是使用表单的方式提交数据,把服务器端返回的参数组装到表单对象中

let formData: Array<http.MultiFormData> = [
  { name: 'name', contentType: 'text/plain', data: fileName },
  { name: 'policy', contentType: 'text/plain', data: resultObj['policy'] },
  { name: 'OSSAccessKeyId', contentType: 'text/plain', data: resultObj['ossAccessKeyId'] },
  { name: 'success_action_status', contentType: 'text/plain', data: '200' },
  { name: 'signature', contentType: 'text/plain', data: resultObj['signature'] },
  { name: 'key', contentType: 'text/plain', data: resultObj['dir'] + fileName },
  {
    name: 'file',
    contentType: 'text/plain',
    filePath: newPath,
    remoteFileName: fileName
  }
],

这里有一个问题需要注意, 就是鸿蒙设备不支持直接把从相册中获取到的文件路径进行上传,需要转换成沙箱路径后才能提交成功

let path = filesPath
const resFile = fileIo.openSync(path, fileIo.OpenMode.READ_ONLY)
let fileName = ''
if (name == undefined) {
  filesPath = resFile.name
} else {
  fileName = name
}
let newPath = context.cacheDir + "/" + fileName
fileIo.copyFileSync(resFile.fd, newPath)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值