一、选择图片:
使用插件 image_picker: “^0.5.0+3”
使用image_picker选择图片,代码如下:

// 相机拍照或者从图库选择图片pickImage(ctx) {// 如果已添加了1张图片,则提示不允许添加更多num size = fileList.length;if (size >= 1) {Scaffold.of(ctx).showSnackBar(new SnackBar(content: new Text("最多只能添加1张图片!"),));return;}showModalBottomSheet<void>(context: context, builder: _bottomSheetBuilder);}_renderBottomMenuItem(title, ImageSource source) {var item = new Container(height: 60.0,child: new Center(child: new Text(title)),);return new InkWell(child: item,onTap: () async {Navigator.of(context).pop();setState(() {_imageFile = ImagePicker.pickImage(source: source);});},);}Widget _bottomSheetBuilder(BuildContext context) {return new Container(height: 182.0,child: new Padding(padding: const EdgeInsets.fromLTRB(0.0, 30.0, 0.0, 30.0),child: new Column(children: <Widget>[_renderBottomMenuItem("相机拍照", ImageSource.camera),new Divider(height: 2.0,),_renderBottomMenuItem("图库选择照片", ImageSource.gallery)],),));}

选择图片后回调,代码如下

List<File> fileList = new List();
Future<File> _imageFile;Widget build(BuildContext context) {return new Scaffold(body: new FutureBuilder(future: _imageFile,builder: (BuildContext context, AsyncSnapshot<File> snapshot) {if (snapshot.connectionState == ConnectionState.done && snapshot.data != null && _imageFile != null) {// 选择了图片(拍照或图库选择),添加到List中fileList.add(snapshot.data);// 阿里云OSS上传图片uploadImage(snapshot.data);_imageFile = null;}// 返回的widgetreturn listView();},),);}

二、上传图片
使用插件dio: “^2.0.0”
使用dio网络访问框架进行上传,代码如下

//上传图片uploadImage(File file) {//签名String url = Constants.BASE_URL + "/ossSignature";print("ossSignatureUrl: $url");NetUtils.get(url).then((obj) async {if (obj != null) {if (obj['code'] == 0) {var _sign = obj['data'];//创建dio对象Dio dio = new Dio();//dio的请求配置dio.options.responseType = ResponseType.plain;dio.options.contentType = ContentType.parse("multipart/form-data");//文件名String path = file.path;String chuo = DateTime.now().millisecondsSinceEpoch.toString() + path.substring(path.lastIndexOf('.'));String fileName = path.lastIndexOf('/') > -1 ? path.substring(path.lastIndexOf('/') + 1) : path;//创建一个FormData,作为dio的参数FormData formData = new FormData.from({'chunk': '0','OSSAccessKeyId': _sign['accessid'].toString(),'policy': _sign['policy'].toString(),'Signature': _sign['signature'].toString(),'Expires': _sign['expire'].toString(),'key': _sign['dir'] + chuo,'success_action_status': '200','Access-Control-Allow-Origin': '*','file': new UploadFileInfo(new File(path), fileName)});try {Response response = await dio.post(_sign['host'], data: formData);if (response.statusCode == 200) {setState(() {imgUrl = _sign['host'] + '/' + _sign['dir'] + chuo;});} else {Toast.show(context, '图片上传失败');}} on DioError catch (e) {Toast.show(context, '上传失败');print("get uploadImage error: $e");}}}}).catchError((e) {print("get uploadImage error: $e");});}

flutter阿里云OSS图片上传相关推荐

  1. 记录一个阿里云OSS图片上传错误

    upload.js?c0e8:599 POST https://gulimall-.oss-cn-shanghai.aliyuncs.com/ 403 (Forbidden) 今天打开项目运行的时候放 ...

  2. file does not exist 阿里云OSS图片上传遇到的问题

    ./uploads\20171209/0497b8dd16e72c6fcf5bfd552f535a81.png file does not exist 原代码 function aliyun($sav ...

  3. .Net6阿里云OSS图片上传

    1:申请注册阿里云账号,找到AccessKey管理 2:添加并创建AccessKey,获取AccessKey ID. AccessKey Secret的值 3:AccessKey ID. Access ...

  4. 阿里云OSS图片上传类

    1.阿里云基本函数 /*** 把本地变量的内容到文件* 简单上传,上传指定变量的内存值作为object的内容*/ public function putObject($imgPath,$object) ...

  5. 阿里云OSS图片上传

    因为项目最近想把七牛的图片转换到阿里OSS,所以就研究了一下, 整理了一下,做了个小demo 其中最主要的一步是获取accessKeyId ,accessKeySecret ,securityToke ...

  6. SpringBoot整合阿里云OSS文件上传、下载、查看、删除

    SpringBoot整合阿里云OSS文件上传.下载.查看.删除 该项目源码地址:https://github.com/ggb2312/springboot-integration-examples ( ...

  7. 如何注册阿里云申请图片上传

    该案例是实际开发中注册阿里云实现图片上传 1.在阿里云官网(https://www.aliyun.com/)注册账号: 2. 注册成功后登录阿里云: 3.登录成功后点击右上角"控制台&quo ...

  8. 阿里云oss视频上传后,如何获取视频封面

    前言:在阿里云oss视频上传后,我们如何获取视频封面呢?而不是通过上传方式获取封面.其实OSS本身提供了视频截帧功能 OSS提供的视频截帧功能和OSS图片服务功能使用的方式是类似的,都是通过传入x-o ...

  9. Java中阿里云OSS文件上传工具类

    阿里云OSS文件上传下载工具类 前言: 本质上就是获取配置文件信息,然后注入bean,调用sdk中提供的增删改方法: 为了避免同名文件会替换,用了hutool中唯一id生成+文件名做拼接 导入依赖:→ ...

最新文章

  1. 解决Android5.0以后DatePicker选择时间无效的bug。
  2. 一线大厂的分布式唯一ID生成方案是什么样的?
  3. hdu-6166(最短路+二进制分组)
  4. 从0到1:构建强大且易用的规则引擎
  5. 拷贝控制——拷贝控制和资源管理,交换操作,对象移动
  6. Pandas 中文文档
  7. Python读取文件时出现UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0x80 in position ...
  8. 中国传统色彩十六进制颜色码图片大全
  9. FineRepot学习及使用总结
  10. ubuntu20禁止hdmi显示器音频输出
  11. #L190616楼市穿越与未来锚点
  12. royal tsx连接闪退_Mac上使用Royal TSX链接服务器
  13. 天载配资解析天赐材料:目标180
  14. Pytorch中rand,randn, random以及normal的区别
  15. 使用Phaser和HTML5特性检测移动设备旋转重力方向
  16. 用python画枫叶-Python中的用for,while循环遍历文件实例
  17. SpringCloud使用@Aspect面向切面处理Web请求日志
  18. 大数据24小时:Salesforce拟65亿美元收购Mulesoft,林志颖加盟小黑鱼科技任首席体验官
  19. 特斯拉FSD技术解析
  20. 等级保护与分级保护关系与区别

热门文章

  1. 【实用工具】技术人如何写好英文论文?
  2. 大数据学习笔记(四)_MapReduce分布式处理框架
  3. 趣图 | 一图详解520最强脱单攻略!
  4. 【对标TensorFlow】阿里公开内部超大规模分布式机器学习平台,对此你怎么看?
  5. 联发科 IC校招笔试题目
  6. premiere不能打开mkv文件?3步快速搞定,这个方法简单好用!
  7. GBase 8a事务控制
  8. 曲神的hu测 T2.Van(左偏树+dp)T3.Gay
  9. 宇宙无敌之Map集合讲解
  10. 蓝桥杯之穿越雷区 BFS