flutter中采用腾讯云COS进行图片存储

2024-06-17 04:04

本文主要是介绍flutter中采用腾讯云COS进行图片存储,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

首先配置文件添加  flutter_cos: ^0.0.3

添加COS配置

import 'dart:io';
import 'dart:io';
import 'dart:convert';
import 'package:http/http.dart' as http;
import 'package:http/http.dart';class CosConfig {final String appid;final String region;final String bucket;CosConfig({required this.appid, required this.region, required this.bucket});
}class CosClient {final String secretId;final String secretKey;final CosConfig config;CosClient({required this.secretId, required this.secretKey, required this.config});Future<Map<String, dynamic>?> putObject({required String key, required File file}) async {final uri = Uri.parse('https://${config.bucket}.cos.${config.region}.myqcloud.com/$key');// 准备 Authorization HeaderMap<String, String> headers = _createAuthorizationHeader(file);// 发起 PUT 请求将文件上传到COSvar request = http.Request('PUT', uri)..headers.addAll(headers)..bodyBytes = await file.readAsBytes();http.StreamedResponse response = await request.send();if (response.statusCode == 200) {print('Upload success!');return {'url': 'https://${config.bucket}.cos.${config.region}.myqcloud.com/$key'};} else {print('Failed with status code: ${response.statusCode}.');return null;}}Map<String, String> _createAuthorizationHeader(File file) {// 这里应包含计算 Authorization 的逻辑,目前返回简化的 headersreturn {'Content-Type': 'application/octet-stream','Authorization':'Your_Authorization_String', // Replace with your actual Auth string computation'x-cos-security-token': '', // 如果使用临时密钥,则需提供};}
}

采用方法调用然后上传

import 'dart:io';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:aurio/utils/CosConfig.dart'; // 请确保这个库提供所需的CosClient和CosConfig类class ImageUploadExample extends StatefulWidget {const ImageUploadExample({super.key});@override_UploadImageToCosState createState() => _UploadImageToCosState();
}class _UploadImageToCosState extends State<ImageUploadExample> {final ImagePicker _picker = ImagePicker();Future<void> uploadImageToCos() async {print('开始选择图片');final XFile? image = await _picker.pickImage(source: ImageSource.gallery);if (image == null) {print('未选择图片');return;}print('图片选择成功: ${image.path}');File imageFile = File(image.path);// 创建配置var config = CosConfig(appid: '', // 这里填你实际的 appidregion: '', // 这里是你的 COS 服务区域bucket: '', // 这里是你的桶名称);print('配置创建完毕');// 创建 client 实例var client = CosClient(secretId: '', // 实际使用时请勿硬编码密钥信息secretKey: '', // 上线时务必使用安全方案储存和使用密钥config: config,);print('COS客户端创建成功,开始上传图片');// 上传图片var res = await client.putObject(key: '', // 指定文件存储在COS的路径file: imageFile,);if (res == null) {print('上传未返回结果');return;}if (res['url'] != null) {print('上传成功,图片 URL: ${res['url']}');// 可以在这里更新 UI 或执行其他逻辑,比如保存 URL 到服务器} else {print('上传失败,返回结果:$res');}}@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: const Text('上传图片到腾讯云 COS'),),body: Center(child: ElevatedButton(onPressed: uploadImageToCos,child: const Text('上传图片'),),),);}
}

这篇关于flutter中采用腾讯云COS进行图片存储的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1068426

相关文章

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令

使用SpringBoot+InfluxDB实现高效数据存储与查询

《使用SpringBoot+InfluxDB实现高效数据存储与查询》InfluxDB是一个开源的时间序列数据库,特别适合处理带有时间戳的监控数据、指标数据等,下面详细介绍如何在SpringBoot项目... 目录1、项目介绍2、 InfluxDB 介绍3、Spring Boot 配置 InfluxDB4、I

使用Python实现无损放大图片功能

《使用Python实现无损放大图片功能》本文介绍了如何使用Python的Pillow库进行无损图片放大,区分了JPEG和PNG格式在放大过程中的特点,并给出了示例代码,JPEG格式可能受压缩影响,需先... 目录一、什么是无损放大?二、实现方法步骤1:读取图片步骤2:无损放大图片步骤3:保存图片三、示php

MySQL按时间维度对亿级数据表进行平滑分表

《MySQL按时间维度对亿级数据表进行平滑分表》本文将以一个真实的4亿数据表分表案例为基础,详细介绍如何在不影响线上业务的情况下,完成按时间维度分表的完整过程,感兴趣的小伙伴可以了解一下... 目录引言一、为什么我们需要分表1.1 单表数据量过大的问题1.2 分表方案选型二、分表前的准备工作2.1 数据评估

MySQL进行分片合并的实现步骤

《MySQL进行分片合并的实现步骤》分片合并是指在分布式数据库系统中,将不同分片上的查询结果进行整合,以获得完整的查询结果,下面就来具体介绍一下,感兴趣的可以了解一下... 目录环境准备项目依赖数据源配置分片上下文分片查询和合并代码实现1. 查询单条记录2. 跨分片查询和合并测试结论分片合并(Shardin

SpringBoot结合Knife4j进行API分组授权管理配置详解

《SpringBoot结合Knife4j进行API分组授权管理配置详解》在现代的微服务架构中,API文档和授权管理是不可或缺的一部分,本文将介绍如何在SpringBoot应用中集成Knife4j,并进... 目录环境准备配置 Swagger配置 Swagger OpenAPI自定义 Swagger UI 底

基于Python Playwright进行前端性能测试的脚本实现

《基于PythonPlaywright进行前端性能测试的脚本实现》在当今Web应用开发中,性能优化是提升用户体验的关键因素之一,本文将介绍如何使用Playwright构建一个自动化性能测试工具,希望... 目录引言工具概述整体架构核心实现解析1. 浏览器初始化2. 性能数据收集3. 资源分析4. 关键性能指

Nginx进行平滑升级的实战指南(不中断服务版本更新)

《Nginx进行平滑升级的实战指南(不中断服务版本更新)》Nginx的平滑升级(也称为热升级)是一种在不停止服务的情况下更新Nginx版本或添加模块的方法,这种升级方式确保了服务的高可用性,避免了因升... 目录一.下载并编译新版Nginx1.下载解压2.编译二.替换可执行文件,并平滑升级1.替换可执行文件

Java使用Thumbnailator库实现图片处理与压缩功能

《Java使用Thumbnailator库实现图片处理与压缩功能》Thumbnailator是高性能Java图像处理库,支持缩放、旋转、水印添加、裁剪及格式转换,提供易用API和性能优化,适合Web应... 目录1. 图片处理库Thumbnailator介绍2. 基本和指定大小图片缩放功能2.1 图片缩放的