flutter 接入阿里云OSS
之前因为使用正常文件上传,用户多时拥堵无法正常上传,因此接入阿里OSS 来解决这个问题。本来打算整原生那块,看了下比较麻烦,用flutter dio 直接请求oss 完成
1.上传用到了image_picker 插件。这个比较简单了。
//要上传的文件,此处为从相册选择照片
File imageFile = await ImagePicker.pickImage(source: ImageSource.gallery);
2.阿里oss 配置以及相关处理String accesskey = '后台返回的AccessKeySecret'; 这个比较重要要用secret print(accesskey); //验证文本域
String policyText =
'{"expiration": "2020-01-01T12:00:00.000Z","conditions": [["content-length-range", 0, 1048576000]]}'; //进行utf8编码
List<int> policyText_utf8 = utf8.encode(policyText);
//进行base64编码
String policy_base64 = base64.encode(policyText_utf8);
//再次进行utf8编码
List<int> policy = utf8.encode(policy_base64);
//进行utf8 编码
List<int> key = utf8.encode(accesskey);
//通过hmac,使用sha1进行加密
List<int> signature_pre = new Hmac(sha1, key).convert(policy).bytes; //最后一步,将上述所得进行base64 编码
String signature = base64.encode(signature_pre); //dio的请求配置,这一步非常重要!
BaseOptions options = new BaseOptions();
options.responseType = ResponseType.plain; 这个后台返回值dio 默认json 要设置为普通文本 //创建dio对象
Dio dio = new Dio(options); //文件名
String fileName = _image.path
.substring(_image.path.lastIndexOf("/") + 1, _image.path.length);
// 生成uuid
String uuid1 = uuid.v1();
//创建一个formdata,作为dio的参数
FormData data = new FormData.from({
'Filename': 'img',
'key': 'images/work/${uuid1}/img.' + fileName.split('.')[1], //设置阿里oss 路径 不写就是默认根目录
'policy': policy_base64,
'OSSAccessKeyId': 'OSSAccessKeyId', 'success_action_status': '200', //让服务端返回200,不然,默认会返回204
'signature': signature,
'file': new UploadFileInfo(new File(_image.path), "imageFileName")
}); // print(_image.path); //
Response response; // Dio dio = new Dio(); // dio.options.baseUrl = DioUtil.API_PREFIX;
var loginData = SpUtil.getObject('loginData'); if (loginData != null) { var token = '${loginData['token_type']} ${loginData['access_token']}';
dio.options.headers['Authorization'] = token; } //设置token
if (Platform.isAndroid) { dio.options.headers['Client-Type'] = 'android'; } else { dio.options.headers['Client-Type'] = 'ios'; }
dio.options.headers['Accept'] = 'application/json'; dio.options.headers['Content-Type'] = 'application/json'; print(dio.options.headers);
setState(() { showPro = true; });
try {
response = await dio .post('http://lncc-public.oss-accelerate.aliyuncs.com', data: data,
onSendProgress: (int sent, int total) { //进度设置
print("上传进度=======$sent $total");
if (sent == total) { print('百分之百');
setState(() { showPro = false; Progress = 100; });
var obj = {'id': 'temp', 'work_url': _image.path};
uploadFileInfo.add(obj);
audioCache.play('collect/upload_01/00001.mp3', volume: 0.5);
setState(() { ifshow = 1.0;
//动画以及声音设置
});
FlutterTimer.startTimerChanged(
duration: _assetList.length, period: periodMilli, fromEnd: false, counting: _animing, end: null);
Future.delayed(Duration(seconds: 4), () {
print('三秒后关闭');
FlutterTimer(context).release();
setState(() {
ifshow = 0; Progress = 0;
});
});
} else {
setState(() {
Progress = int.parse(((sent / total) * 100).toStringAsFixed(0)); print(Progress); }); }
});
var result = response.statusCode;
if(result==200){
print(result);
var upurl = 'https://public-statics.lnart.com/images/work/${uuid1}/img.'+ fileName.split('.')[1]; print(upurl); //将上传oss的路径上传到自己的服务器
setState(() { showPro = false; });
}
} on DioError catch (e) {
print(e.message);
print(e.response.data);
print(e.response.headers);
print(e.response.request);
}

flutter 接入阿里云OSS的更多相关文章
- Java项目接入阿里云OSS存储
需求背景 目前公司内部项目所支持的文件云存储方式还是公司内部项目组提供的方案,但在时间的考验之下,弊端显现,尤其是灾备切换过程中需要切换访问地址,这种操作不方便,更可能因为中间过程的失误导致资源不可用 ...
- 阿里云 OSS+CDN
https://promotion.aliyun.com/ntms/ossedu2.html https://www.aliyun.com/act/aliyun/ossdoc.html 对象存储(Ob ...
- 用DzzOffice管理阿里云OSS
在DzzOffice分两种方式管理阿里云OSS 1.把阿里云oss作为多人或企业的共享网盘使用. 2.接入个人的阿里云oss管理,可同时管理多个bucket,多个bucket之间可以互传文件. 下面先 ...
- 使用阿里云oss
写这篇博文的原因是公司有个项目需要用到阿里云来存放用户头像文件.后期软件安装版本也可能需要存进去,然后折腾了两天终于摸熟了一点皮毛,在这里给大家简单介绍下. 一.初识对象存储oss 1.进入阿里云控制 ...
- 阿里云OSS同城冗余存储正式商业化,提供云上同城容灾能力
近日,阿里云正式发布OSS同城冗余存储产品.这是国内目前提供同城多AZ冗余部署能力覆盖最广的云上对象存储产品,可以实现云存储的同城双活,满足企业级客户对于“发生机房级灾难事件时数据不丢失,业务不中断” ...
- 记一次阿里云oss文件上传服务假死
引言 记得以前刚开始学习web项目的时候,经常涉及到需要上传图片啥的,那时候都是把图片上传到当前项目文件夹下面,每次项目一重启图片就丢了.虽然可以通过修改/tomcat/conf/server.xml ...
- 文件上传接入阿里云OSS
目的:将文件交给阿里云进行管理,可避免文件对本地服务器资源的占用,阿里云OSS还可根据读写偏好选择合适的文件存储类型服务器,文件异地备份等 一.阿里云OSS基础了解(前提) 1.存储空间(Bucket ...
- phpcmsv9 阿里云OSS云存储整合教程
该教程算不上是phpcmsv9阿里云oss插件,所以整个修改及其代码覆盖前请一定记得备份.还有一点就是后台发布文章时上传的附件还是会保存在你的服务器上,基于以下原因:1.个人的需求是前台页面需要使用t ...
- angulaijs中的ng-upload-file与阿里云oss服务的结合,实现在浏览器端上传文件到阿里云(速度可以达到1.5M)
2015-10-26 angularjs结合aliyun浏览器端oos文件上传加临时身份验证例子 在服务端获取sts 源码: public class StsServiceSample { // 目前 ...
随机推荐
- MyBank后感
MyBank系统主要的构成部分有:银行账户的初始化,开户,存款,取款,转账,查询余额,修改密码这些操作. =============================================== ...
- JSP中获取客户端或浏览端信息的方式
request应用:在JSP页面显示访问者IP 方式一:纯前台,不涉及后台操作.直接在jsp页面中需要显示IP的地方使用 代码:<%=request.getRemoteAddr()%> ...
- 如何稀释 流事件 (如,onscroll、change、input、mouseover 等 事件)
1.问题引入:https://segmentfault.com/q/1010000000707337?_ea=62905 2.javascript中的函数节流和函数去抖:https://www.cnb ...
- python rpy2,tkinter安装问题解决
windows系统下 在python中直接pip install rpy2时,会出错,没仔细看错误,直接下载了whl文件(https://www.lfd.uci.edu/~gohlke/pythonl ...
- 专家揭秘:STM32启动过程全解
电子发烧友网核心提示:本文主要阐述了STM32启动过程全面解析,包括启动过程的介绍.启动代码的陈列以及深入解析. 相对于ARM上一代的主流ARM7/ARM9内核架构,新一代Cortex内核架构的启动方 ...
- Oracle 简单统计示例
有数据如下: eg1:现在需要统计所有男性人员数量,所有女性人员数量,sclassno=10000的男性人员的总年龄,年龄大于20的女性人员数量 ----sign( number )/*If numb ...
- 小程序中封装base64
function Base64() { // private property var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmn ...
- Java + selenium 元素定位(1)之By id/Name/ClassName
这篇文章开始,要介绍web自动化核心的内容,也是最困难的部分了,就是定位元素,并去对元素进行操作.想要对元素进行操作,第一步,也是最重要的一步,就是要找到这个元素,如果连元素都定位不到,后续什么操作都 ...
- Linux目录及说明
Linux目录及说明 [常见目录说明] 目录 /bin 存放二进制可执行文件(ls,cat,mkdir等),常用命令一般都在这里. /etc 存放系统管理和配置文件 /home 存放所有用户文件的根目 ...
- Cocos2d-x之Map<K, V>
| 版权声明:本文为博主原创文章,未经博主允许不得转载. Map<K, V>是Cocos2d-x 3.0x中推出的字典容器,它也能容纳Ref类型.Map<K,V>是模仿C+ ...