之前因为使用正常文件上传,用户多时拥堵无法正常上传,因此接入阿里OSS 来解决这个问题。本来打算整原生那块,看了下比较麻烦,用flutter dio 直接请求oss 完成

1.上传用到了image_picker 插件。这个比较简单了。

  1. //要上传的文件,此处为从相册选择照片
  2. File imageFile = await ImagePicker.pickImage(source: ImageSource.gallery);

2.阿里oss 配置以及相关处理String accesskey = '后台返回的AccessKeySecret'; 这个比较重要要用secret    print(accesskey);    //验证文本域

  1. String policyText =
  2. '{"expiration": "2020-01-01T12:00:00.000Z","conditions": [["content-length-range", 0, 1048576000]]}';
  3. //进行utf8编码
  4. List<int> policyText_utf8 = utf8.encode(policyText);
  5. //进行base64编码
  6. String policy_base64 = base64.encode(policyText_utf8);
  7. //再次进行utf8编码
  8. List<int> policy = utf8.encode(policy_base64);
  9. //进行utf8 编码
  10. List<int> key = utf8.encode(accesskey);
  11. //通过hmac,使用sha1进行加密
  12. List<int> signature_pre = new Hmac(sha1, key).convert(policy).bytes;
  13. //最后一步,将上述所得进行base64 编码
  14. String signature = base64.encode(signature_pre);
  15. //dio的请求配置,这一步非常重要!
  16. BaseOptions options = new BaseOptions();
  17. options.responseType = ResponseType.plain; 这个后台返回值dio 默认json 要设置为普通文本
  18. //创建dio对象
  19. Dio dio = new Dio(options);
  20. //文件名
  21. String fileName = _image.path
  22. .substring(_image.path.lastIndexOf("/") + 1, _image.path.length);
  23. // 生成uuid
  24. String uuid1 = uuid.v1();
  25. //创建一个formdata,作为dio的参数
  26. FormData data = new FormData.from({
  27. 'Filename': 'img',
  28. 'key': 'images/work/${uuid1}/img.' + fileName.split('.')[1], //设置阿里oss 路径 不写就是默认根目录
  29. 'policy': policy_base64,
  30. 'OSSAccessKeyId': 'OSSAccessKeyId',
  31. '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;
    //动画以及声音设置
    });
  1. 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的更多相关文章

  1. Java项目接入阿里云OSS存储

    需求背景 目前公司内部项目所支持的文件云存储方式还是公司内部项目组提供的方案,但在时间的考验之下,弊端显现,尤其是灾备切换过程中需要切换访问地址,这种操作不方便,更可能因为中间过程的失误导致资源不可用 ...

  2. 阿里云 OSS+CDN

    https://promotion.aliyun.com/ntms/ossedu2.html https://www.aliyun.com/act/aliyun/ossdoc.html 对象存储(Ob ...

  3. 用DzzOffice管理阿里云OSS

    在DzzOffice分两种方式管理阿里云OSS 1.把阿里云oss作为多人或企业的共享网盘使用. 2.接入个人的阿里云oss管理,可同时管理多个bucket,多个bucket之间可以互传文件. 下面先 ...

  4. 使用阿里云oss

    写这篇博文的原因是公司有个项目需要用到阿里云来存放用户头像文件.后期软件安装版本也可能需要存进去,然后折腾了两天终于摸熟了一点皮毛,在这里给大家简单介绍下. 一.初识对象存储oss 1.进入阿里云控制 ...

  5. 阿里云OSS同城冗余存储正式商业化,提供云上同城容灾能力

    近日,阿里云正式发布OSS同城冗余存储产品.这是国内目前提供同城多AZ冗余部署能力覆盖最广的云上对象存储产品,可以实现云存储的同城双活,满足企业级客户对于“发生机房级灾难事件时数据不丢失,业务不中断” ...

  6. 记一次阿里云oss文件上传服务假死

    引言 记得以前刚开始学习web项目的时候,经常涉及到需要上传图片啥的,那时候都是把图片上传到当前项目文件夹下面,每次项目一重启图片就丢了.虽然可以通过修改/tomcat/conf/server.xml ...

  7. 文件上传接入阿里云OSS

    目的:将文件交给阿里云进行管理,可避免文件对本地服务器资源的占用,阿里云OSS还可根据读写偏好选择合适的文件存储类型服务器,文件异地备份等 一.阿里云OSS基础了解(前提) 1.存储空间(Bucket ...

  8. phpcmsv9 阿里云OSS云存储整合教程

    该教程算不上是phpcmsv9阿里云oss插件,所以整个修改及其代码覆盖前请一定记得备份.还有一点就是后台发布文章时上传的附件还是会保存在你的服务器上,基于以下原因:1.个人的需求是前台页面需要使用t ...

  9. angulaijs中的ng-upload-file与阿里云oss服务的结合,实现在浏览器端上传文件到阿里云(速度可以达到1.5M)

    2015-10-26 angularjs结合aliyun浏览器端oos文件上传加临时身份验证例子 在服务端获取sts 源码: public class StsServiceSample { // 目前 ...

随机推荐

  1. Bugku | Easy_vb

    载入ida,直接搜‘ctf’就有了,坑点是不要交“MCTF{XXX}”,要交“flag{XXXX}”

  2. php 统计每天价格,货币种类,汇总得算法和数据处理 (后端和前段实现自动统计价格和币种类型)

    整体实现逻辑介绍 1.对查询数据做一个总体查询,需要根据查询自己主要业务逻辑数据. 2.对总体查询数据和时间和币种类型做三部分数据处理. 3.总体查询数据按照币种和日期组装二维数据对应得键值是价格. ...

  3. nboot,eboot和uboot

    nboot,eboot和uboot三者均为bootloader. ----nboot是samsung系列cpu为了能将前4KB程序复制到SRAM中运行,而在wince写的.nboot很小(4k左右), ...

  4. U-Boot是什么

    U-Boot U-Boot,全称 Universal Boot Loader,是遵循GPL条款的开放源码项目.U-Boot的作用是系统引导.U-Boot从FADSROM.8xxROM.PPCBOOT逐 ...

  5. JVM调优(四)——tomcat远程debug

    JVM调优(四)--tomcat远程debug tomcat远程debug jdwp协议 使用步骤 登录远程服务器,进入tomcat目录,并打开文件: //tomcat/bin/startup.sh ...

  6. 日期和时间格式(ISO 8601)

    参考 ISO 8601 - Wikipedia ISO 8601 Date and time format

  7. 使用Xftp连接Centos 6.6服务器详细图文教程

    这篇文章主要介绍了使用Xftp连接Centos 6.6服务器详细图文教程,本文用详细的图文说明讲解了连接服务器和操作服务器的步骤,适合新手,需要的朋友可以参考下 一,打开Xftp软件(下载地址:Xma ...

  8. idhttp提交post

    var Param:TStringList; RStream:TMemoryStream;begin Param:=TStringList.Create; RStream:=TMemoryStream ...

  9. Java必备主流技术流程图,写得非常好!

    作者:Jay_huaxiao https://juejin.im/post/5d214639e51d4550bf1ae8df 1.spring的生命周期 Spring作为当前Java最流行.最强大的轻 ...

  10. 8条关于Web前端性能的优化建议

    一般网站优化都是优化后台,如接口的响应时间.SQL优化.后台代码性能优化.服务器优化等.高并发情况下,对前端web优化也是非常重要的. 下面说说几种常见的优化措施. 1.HTML CSS JS位置 一 ...