大家好,我是学习Flutter一个月的三须鳗鱼张信哲 ,熟练使用CV大法。
Flutter 上传文件到阿里云OSS是个大坑,查了一堆博客,多多少少有些问题
有人写了库:[aly_oss 1.0.1](不建议使用 )
参考了这个博客:Flutter图片上传OSS,这个博客开篇第一句就把我搞蒙了…………
目前阿里没有针对Flutter有官方SDK可集成, 但是有人对Flutter的上传有封装库https://pub.dev/packages/aly_oss#-example-tab-, 所以我们只能通过post提交PostObject的形式来上传;
不过没关系,核心技术还在
开始开展传统艺能:CV大法
这是那位老哥的
// 通过ossServerUrl直接get获取到如下数据
{
"StatusCode": 200,
"AccessKeyId": "STS.NSsrKZes4cqm.....",
"AccessKeySecret": "7eGnLZaEFsRCGYJAnrtdE9n.....",
"Expiration": "2020-04-08T03:44:21Z",
"SecurityToken": "CAISlQJ1q6Ft5B2y....."
}
//表单需要的参数: AccessKeyId、AccessKeySecret、SecurityToken;
FormData formdata = new FormData.from({
//文件名,随意
'Filename': OssUtil.instance.getImageName(filePath),
//"可以填写文件夹名(对应于oss服务中的文件夹)/" + fileName
'key': uploadName,//上传后的文件名
'policy': OssUtil.policy,
//Bucket 拥有者的AccessKeyId。
'OSSAccessKeyId': data['AccessKeyId'],
//让服务端返回200,不然,默认会返回204
'success_action_status': '200',
'signature': OssUtil.instance.getSignature(data['AccessKeySecret']),
//临时用户授权时必须,需要携带后台返回的security-token
'x-oss-security-token': data['SecurityToken'],
'file': new UploadFileInfo(
file, OssUtil.instance.getImageNameByPath(filePath))
//必须放在参数最后
});
//然后通过存储地址直接把表单(formdata)上传上去;
Dio dio=Dio();
dio.options.responseType=ResponseType.plain;
Response response=awaitdio.post(<ossEndPointCdn>,data:formData);
......
有个问题:UploadFileInfo
已弃用,改用MultipartFile
准备工作一:准备文件
文件准备阶段,使用image_picker
,image_picker
获取到的路径是个带包名的(临时?)路径,文件名也使用image_picker前缀来命名,使用 MultipartFile.fromFile
获取文件时会有问题,需要使用MultipartFile.fromFileSync
(MultipartFile文档也没有说明啊,那个接口干嘛,只能瞎几把猜望文生义了 )
准备工作二:准备OSS许可
oss许可让服务端去搞,返回一段json
{
"StatusCode": "200",
"AccessKeyId": "STS.NSsrKZes4cqm.....",
"AccessKeySecret": "7eGnLZaEFsRCGYJAnrtdE9n.....",
"Expiration": "2020-04-08T03:44:21Z",
"SecurityToken"