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

news/2024/9/25 23:20:06/

首先配置文件添加  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('上传图片'),),),);}
}


http://www.ppmy.cn/news/1470320.html

相关文章

Windows桌面运维----第四天

1、U盘故障打不开&#xff1a; 操作方式&#xff1a;WinR打开运行&#xff0c;输入cmd确定&#xff0c;在&#xff08;C:\Users\Administrator>&#xff09;后输入chkdsk,空格&#xff0c;输入U盘盘符&#xff0c;例如F:/F&#xff0c;回车&#xff0c;等待修复完成。 2、…

网络安全,怎么搭建Python防范环境

注意:本文的下载教程,与以下文章的思路有相同点,也有不同点,最终目标只是让读者从多维度去熟练掌握本知识点。 下载教程: Python网络安全项目开发实战_搭建Python防范环境_编程案例解析实例详解课程教程.pdf 构建一个Python环境下的网络安全防范体系是一个涉及多个层面和步…

3D开发工具HOOPS为BIM应用提供支持:复杂大模型实现Web端轻量化!

在数字化转型的浪潮中&#xff0c;Tech Soft 3D以其HOOPS SDK工具包&#xff0c;为软件开发人员提供了强大的支持。这一工具包不仅支持Windows、Linux、OSX和移动平台等多样化的操作系统&#xff0c;还使得开发人员能够构建出庞大而复杂的建筑和BIM应用程序。HOOPS SDK的多格式…

计算机组成原理---Cache的基本工作原理习题

对应知识点&#xff1a; Cache的基本原理 1.某存储系统中&#xff0c;主存容量是Cache容量的4096倍&#xff0c;Cache 被分为 64 个块&#xff0c;当主存地址和Cache地址采用直接映射方式时&#xff0c;地址映射表的大小应为&#xff08;&#xff09;(假设不考虑一致维护和替…

怎么移除pdf文件编辑限制,有哪些方法?

PDF是我们在学习或工作中常常应用到的一种文件格式&#xff0c;因为它的跨平台性和文档保真度而备受欢迎。但是&#xff0c;有时我们会遇到PDF编辑权限被限制了&#xff0c;那么pdf解除编辑限制可以用什么方法呢&#xff1f;别急&#xff0c;接下来&#xff0c;本文将深入探讨如…

Spring Boot 面试热点(一)

Spring Boot 是 Spring 框架的一个子项目&#xff0c;旨在简化新 Spring 应用的初始搭建以及开发过程。它通过约定优于配置的原则&#xff0c;极大地减少了开发人员的工作量。以下是一些在面试中常见的 Spring Boot 热点问题。 1. Spring Boot 的优势 快速开发 自动配置: Sp…

刷题——链表节点,奇偶重排

链表的奇偶重排_牛客题霸_牛客网 给定一个单链表&#xff0c;请设定一个函数&#xff0c;将链表的奇数位节点和偶数位节点分别放在一起&#xff0c;重排后输出。 注意是节点的编号而非节点的数值。 数据范围&#xff1a;节点数量满足 0≤&#x1d45b;≤1050≤n≤105&#x…

VMR,支持30+种编程语言的SDK版本管理器,支持Windows/MacOS/Linux。

官方文档地址&#xff1a;documents 官方项目地址&#xff1a;github 欢迎安装使用&#xff0c;分享转发&#xff0c;前往github star。 跨平台&#xff0c;支持Windows&#xff0c;Linux&#xff0c;MacOS支持多种语言和工具&#xff0c;省心受到lazygit的启发&#xff0c;拥…