Flutter之下载网络图片并保存到本地文件夹

图片地址:https://img03.sogoucdn.com/v2/thumb/retype_exclude_gif/ext/auto/crop/xy/ai/w/1284/h/722?appid=200698&url=https://pic.baike.soso.com/ugc/baikepic2/24446/cut-20211222173333-829293243_jpg_1308_872_50708.jpg/0

因为图片是二进制数据的形式存储在计算机中的,所以保存图片到本地必须使用二进制数据。

下载图片

//下载图片
  var result = await HttpManager.getInstance().get(
      "https://img03.sogoucdn.com/v2/thumb/retype_exclude_gif/ext/auto/crop/xy/ai/w/1284/h/722?appid=200698&url=https://pic.baike.soso.com/ugc/baikepic2/24446/cut-20211222173333-829293243_jpg_1308_872_50708.jpg/0",
      //将返回类型设置为二进制,此时的result是二进制数据,保存的是图片的字节数组
      option: Options(responseType: ResponseType.bytes));

选择本地文件夹

此时需利用file_picker: ^5.3.3 包

  • 添加依赖

  •  选择文件目录

//选择文档目录
  //selectedDirectory是选择的文件夹的地址  C:\Users\lanlian\Desktop\沈成林\休闲娱乐来一套\下载图片
  String? selectedDirectory = await FilePicker.platform.getDirectoryPath();
  if (selectedDirectory == null) {
    print("请选择正确的文件地址");
    return;
  }
else{}

此时需要判断选择的文档地址是否为空,如果则退出选择,不为空则继续操作

保存图片

  • 创建一个名为$name的新文件(要将图片保存到这里)

此时需要判断保存的图片是否已经存在,如果已经存在则退出

//创建一个名为download1.jpg的新文件
    File image_file=File('${selectedDirectory}/download1.jpg');
    if(image_file.existsSync()){
      print("图片已存在");
      return;
    }
  • 将下载获取的图片的字节信息写入这个新文件
 //从网络上下载的图片的字节数组写入该文件中。
    image_file.writeAsBytes(result);

完整代码 

Future<void> saveImage() async {
  print("保存图片到本地");
  //下载图片
  var result = await HttpManager.getInstance().get(
      "https://img03.sogoucdn.com/v2/thumb/retype_exclude_gif/ext/auto/crop/xy/ai/w/1284/h/722?appid=200698&url=https://pic.baike.soso.com/ugc/baikepic2/24446/cut-20211222173333-829293243_jpg_1308_872_50708.jpg/0",
      //将返回类型设置为二进制,此时的result是二进制数据,保存的是图片的字节数组
      option: Options(responseType: ResponseType.bytes));
  //选择文档目录
  //selectedDirectory是选择的文件夹的地址  C:\Users\lanlian\Desktop\沈成林\休闲娱乐来一套\下载图片
  String? selectedDirectory = await FilePicker.platform.getDirectoryPath();
  if (selectedDirectory == null) {
    print("请选择正确的文件地址");
    return;
  }
  else{
    print("selectedDirectory:${selectedDirectory}");
    //创建一个名为download1.jpg的新文件
    File image_file=File('${selectedDirectory}/download1.jpg');
    if(image_file.existsSync()){
      print("图片已存在");
      return;
    }
    //从网络上下载的图片的字节数组写入该文件中。
    image_file.writeAsBytes(result);
  }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将Flutter中的图片保存到本地并分享到QQ,你可以按照以下步骤操作: 1. 将图片保存到本地存储,可以使用以下代码: ```dart import 'dart:io'; import 'package:flutter/material.dart'; import 'package:path_provider/path_provider.dart'; import 'package:image_gallery_saver/image_gallery_saver.dart'; Future<void> saveImageToGallery(BuildContext context, String imageUrl) async { try { // 获取应用程序目录 Directory appDocDir = await getApplicationDocumentsDirectory(); // 获取文件名 String fileName = imageUrl.substring(imageUrl.lastIndexOf("/") + 1); // 组合路径 String filePath = "${appDocDir.path}/$fileName"; // 下载图片 HttpClient httpClient = HttpClient(); HttpClientRequest request = await httpClient.getUrl(Uri.parse(imageUrl)); HttpClientResponse response = await request.close(); Uint8List bytes = await consolidateHttpClientResponseBytes(response); // 保存图片到本地 File file = File(filePath); await file.writeAsBytes(bytes); // 保存图片到相册 await ImageGallerySaver.saveImage(bytes); ScaffoldMessenger.of(context).showSnackBar(SnackBar( content: Text("图片保存到相册"), )); } catch (e) { ScaffoldMessenger.of(context).showSnackBar(SnackBar( content: Text("保存图片失败: $e"), )); } } ``` 2. 调用QQ分享功能,可以使用以下代码: ```dart import 'package:flutter/material.dart'; import 'package:flutter_qq_share/flutter_qq_share.dart'; Future<void> shareImageToQQ(BuildContext context, String imageUrl) async { try { // 获取应用程序目录 Directory appDocDir = await getApplicationDocumentsDirectory(); // 获取文件名 String fileName = imageUrl.substring(imageUrl.lastIndexOf("/") + 1); // 组合路径 String filePath = "${appDocDir.path}/$fileName"; // 下载图片 HttpClient httpClient = HttpClient(); HttpClientRequest request = await httpClient.getUrl(Uri.parse(imageUrl)); HttpClientResponse response = await request.close(); Uint8List bytes = await consolidateHttpClientResponseBytes(response); // 保存图片到本地 File file = File(filePath); await file.writeAsBytes(bytes); // 分享图片到QQ await FlutterQQShare.shareImageToQQ(filePath); } catch (e) { ScaffoldMessenger.of(context).showSnackBar(SnackBar( content: Text("分享图片失败: $e"), )); } } ``` 调用 `saveImageToGallery` 函数可以将图片保存到本地保存到相册,调用 `shareImageToQQ` 函数可以将图片分享到QQ。你可以根据自己的需求修改和调整这些代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值