在做flutter时遇到图片上传到阿里oss上的功能, 首先官网上没有针对dart的sdk, 因此, 我通过https://pub.dev/ 查询竟然有大佬提供了库, https://pub.dev/packages/aly_oss, 看了这个库, 但是我在flutter pub get成功后执行 flutter run尽然失败. 因此, 换个思路, 通过
1. 首先通过接口获取本服务器配置的bucket和key, 属于基础配置, 后面要用;
2. 然后通过接口获取accessKeyId, accessKeySecret,securityToken, 也属于基础配置, 后面要用;
3. 然后就是组装FormData, 如图1所示,
图1
1) Filename: 对应本地使用的名;
2) key: 上传到服务器的文件名和路径, AliOssManager.instance.model.key为上面第一步提到的key;
3) policy: OssUtil类中组装的(不好意思, 我也没看懂);
4) OSSAccessKeyId: 第二步提到的accessKeyId;
5) signature: OssUtil类中组装的, 参数accessKeySecret为第二步提到的accessKeySecret;
6) x-oss-security-token: 第二步提到的securityToken;
7) file: 图片文件;
4. 组装好FormData后, 就是调用Dio发送网络请求了, 如图2所示,
图2
为Dio的post请求所需要的参数, 此时, 我们只需要关心path和data, data, 就是刚才组装的FormData, path我这边纠结了很久,也不知道是什么, 后来偶然在官网上看到了,图3所示
图3
path为 BucketName.oss-cn-hangzhou.aliyuncs.com, BucketName也就是前面第一步获取到的bucket, oss-cn-hangzhou.aliyuncs.com为 endpoint, 申请oss服务的时候会有这个, 中间就 . 连接,
5. 所有工作都完成, 运行, 解决问题。