当前位置: 首页 > news >正文

flutter使用dio上传图片到阿里云Oss存储

最近呢,由于工作需要,然后之网上也找了一些博客资料。总觉得实现起来有很多问题。下面分享下我到一个完整例子。

 1.插件安装

dio: ^2.1.13
image_picker: ^0.6.0+1

2.准备阿里云oss信息

accessKey 和AccessKeySecret

3下面我就在2个方法里面实现拍照上传到功能

 

/   //拍照
  _takePhoto() async {
    var image = await ImagePicker.pickImage(
        source: ImageSource.camera, maxWidth: 400); //maxWidth: 400剪切操作
    setState(() {
      this._image = image;
    });
    //调用图片上传
    this.uploadImage(this._image);
  }

//上传图片
  uploadImage(File file) async {
   

//验证文本域 这里设置是过期时间
    String policyText =
        '{"expiration": "2090-01-01T12:00:00.000Z","conditions": [["content-length-range", 0, 1048576000]]}';

//进行utf8编码
    List<int> policyTextUtf8 = utf8.encode(policyText);

//进行base64编码
    String policyBase64 = base64.encode(policyTextUtf8);

//再次进行utf8编码
    List<int> policy = utf8.encode(policyBase64);

    String accesskey = '你自己的accesskeysecret';

//进行utf8 编码
    List<int> key = utf8.encode(accesskey);

//通过hmac,使用sha1进行加密
    List<int> signaturePre = new Hmac(sha1, key).convert(policy).bytes;

//最后一步,将上述所得进行base64 编码
    String signature = base64.encode(signaturePre);

    //创建dio对象
    Dio dio = new Dio();
    //dio的请求配置
    dio.options.responseType = ResponseType.plain;
    //  dio.options.contentType = ContentType.parse("image/jpg");
    dio.options.contentType = ContentType.parse("multipart/form-data");
    //上传到文件名
    String fileName = _image.path
        .substring(_image.path.lastIndexOf("/") + 1, _image.path.length);
//创建一个formdata,作为dio的参数
    FormData data = new FormData.from({
      'Filename': 'ddd.jpg',
      'key': "images/" + fileName,
      'policy': policyBase64,
      'OSSAccessKeyId': "你自己的id",
      'success_action_status': '200', //让服务端返回200,不然,默认会返回204
      'signature': signature,
      'file': new UploadFileInfo(file, "imageFileName")
    });

    try {
      Response response = await dio
          .post("http://wangnode.oss-cn-beijing.aliyuncs.com", data: data);
      if (response.statusCode == 200) {
        print(response.headers);
        print(response.data);
        print(
            "https://wangnode.oss-cn-beijing.aliyuncs.com/images/" + fileName);
        setState(() {
          pimg =
              "https://wangnode.oss-cn-beijing.aliyuncs.com/images/" + fileName;
        });
      }
    } on DioError catch (e) {
      print(e.message);
      print(e.response.data);
      print(e.response.headers);
      print(e.response.request);
      print(accesskey);
    }
  }

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • sizeof终极无惑
  • uniapp图片上传
  • 电子游戏发展史话——《doom启示录》读后感(三)
  • $GOPATH/go.mod exists but should not goland
  • const用法小结(原创)
  • uniapp上传图片和视频到OSS
  • 华为一道排序题
  • fiber框架token校验
  • uniapp导出excel
  • 华为2004年招收应届大学毕业生技术支持面试题。
  • go语言中的指针(一)
  • 华为面试题
  • Error: Unable to ‘pub upgrade‘ flutter tool
  • 中兴面试C语言题1
  • Goexit
  • [deviceone开发]-do_Webview的基本示例
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • Angular Elements 及其运作原理
  • Flannel解读
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • happypack两次报错的问题
  • ng6--错误信息小结(持续更新)
  • 二维平面内的碰撞检测【一】
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 两列自适应布局方案整理
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 温故知新之javascript面向对象
  • 因为阿里,他们成了“杭漂”
  • 自制字幕遮挡器
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #QT(串口助手-界面)
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • $(selector).each()和$.each()的区别
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (BAT向)Java岗常问高频面试汇总:MyBatis 微服务 Spring 分布式 MySQL等(1)
  • (CVPRW,2024)可学习的提示:遥感领域小样本语义分割
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (学习日记)2024.02.29:UCOSIII第二节
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (自适应手机端)响应式服装服饰外贸企业网站模板
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .chm格式文件如何阅读
  • .cn根服务器被攻击之后
  • .Net Remoting(分离服务程序实现) - Part.3
  • .net Stream篇(六)
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境
  • .Net下C#针对Excel开发控件汇总(ClosedXML,EPPlus,NPOI)
  • /proc/vmstat 详解
  • @Transient注解
  • @WebServiceClient注解,wsdlLocation 可配置
  • [bzoj 3124][sdoi 2013 省选] 直径