鸿蒙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)
更多推荐



所有评论(0)