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

Flutter与FastAPI的OSS系统实现

作者:孙嘉成

目录

一、对象存储

二、FastAPI与对象存储

2.1 缤纷云S4服务API对接与鉴权实现

2.2 RESTful接口设计与异步路由优化

三、Flutter界面与数据交互开发

3.1 应用的创建

3.2页面的搭建

3.3 文件的上传


关键词:对象存储、FastAPI、Flutter

一、对象存储

对象存储服务(Object Storage Service,OSS)是一种以离散数据单元为操作对象的技术架构,依托分布式系统架构提供基于对象形式的数据存储服务。相较于传统数据库,对象存储在存储海量非结构化数据时具有显著优势,通过横向扩展架构实现近乎无限的存储容量;采用多副本/纠删码技术保障数据持久性;支持高并发访问确保读写性能;通过智能数据冗余机制提升存储效率。

当前主流云服务提供商均推出了自研的对象存储服务,典型代表包括阿里云OSS、腾讯云COS、华为云OBS以及缤纷云S4存储等产品。

缤纷云 S4 对象存储服务作为新一代云原生存储平台,深度融合了分布式存储技术和智能管理算法,为企业级用户提供安全可靠、弹性扩展的非结构化数据存储解决方案。下面介绍如何使用:

首先进入官网:

点击控制台进行注册和登录操作:

在桶列表中创建一个桶进行数据的存储:

添加子账户并获取桶的管理权限:

打开创建子用户的读写权限:

二、FastAPI与对象存储

2.1 缤纷云S4服务API对接与鉴权实现

查看官方文档,查看如何通过Python实现对缤纷云S4的操作。

引入 boto3 框架,在命令行中使用命令pip install boto3下载。

根据官方文档进行配置:

将其中的信息更换为自己的信息即可,打印的信息中“HTTPStatusCode”对应的值为200,即代表配置成功。

2.2 RESTful接口设计与异步路由优化

下载FastAPI框架:

创建POST接口,接收文件:

设置应用启动端口:

运行应用进行测试:

点击后在浏览器地址栏输入/docs进入FastAPI框架自带的文档进行上传文件测试:

选择文件进行上传:

返回成功信息:

三、Flutter界面与数据交互开发

3.1 应用的创建

打开命令窗口,创建Flutter应用

根据命令提示,构建项目

3.2页面的搭建

居中按钮组件

Center(child: _buildUploadButton(context: context,label: '图片上传',onPressed: invoiceUploadViewModel.uploadInvoice,isActive: !invoiceUploadViewModel.isUploading,),),

上传逻辑

Future<void> uploadInvoice() async {try {if (_isUploading) return;_isUploading = true;notifyListeners();final files = await _invoiceUploadRepository.pickFiles();if (files == null || files.isEmpty) {_isUploading = false;notifyListeners();return;}final prefs = await SharedPreferences.getInstance();final userInfo = jsonDecode(prefs.getString('userInfo')!);final userId = userInfo['user_id'] as int; // 明确类型转换final tempMessages = <String>[];for (final file in files) {try {final imageUrl = await _invoiceUploadRepository.uploadToOSS(file,userId,);final result = await _invoiceUploadRepository.submitInvoiceInfo(imageUrl,userId,);tempMessages.add('✅ ${path.basename(file.path)} 上传成功: $result');successCount++;} catch (e) {debugPrint(_getErrorMessage(e));tempMessages.add('❌ ${path.basename(file.path)} 上传失败: 发票已存在',); // 显示具体错误}notifyListeners();}_messages.addAll(tempMessages);_isUploaded = true;_messages.add('🚨 系统错误: ${_getErrorMessage(e)}');} catch (e) {} finally {_isUploading = false;notifyListeners();}}

3.3 文件的上传

 Future<String> uploadToOSS(File file, int userId) async {final fileName = path.basename(file.path); // 使用 path 包获取正确文件名await uploadImage(file, userId);return 'https://fapiao.s3.bitiful.net/images/$userId/$fileName'; // 修正路径拼接}

文件成功上传:

http://www.xdnf.cn/news/11557.html

相关文章:

  • 【系统架构设计师】统一过程模型(RUP)
  • 什么是爬虫?——从技术原理到现实应用的全面解析
  • Scrapeless Scraping Browser: A high-concurrency automation solution for AI
  • 高翔《视觉SLAM十四讲》第7章对极几何相关内容,对极约束分析讲解
  • 文章记单词 | 第38篇(六级)
  • fetch使用put请求提交文件,postman使用put请求提交文件
  • 将DeepSeek-R1蒸馏为轻量级模型实战
  • 《AI赋能职场:大模型高效应用课》第8课 AI辅助职场沟通与协作
  • 【专题刷题】双指针(四):最接近的三数之和,接雨水
  • C#中扩展方法和钩子机制使用
  • ARINC818协议的帧格式
  • 如何构建跨平台可复用的业务逻辑层(Web、App、小程序)
  • Elasticsearch倒排索引与传统索引对比
  • iOS 冷启动时间监控:启动起点有哪些选择?
  • OpenBMC:BmcWeb log输出
  • 消息中间件——RocketMQ(二)
  • git push
  • MySQL快速入门篇---库的操作
  • 2025年03月中国电子学会青少年软件编程(Python)等级考试试卷(二级)答案 + 解析
  • 深入规划 Elasticsearch 索引:策略与实践
  • RFID图书管理系统如何重构数字化仓储管理新生态
  • 【硬件系统架构】冯·诺依曼架构
  • VOIP通信中的错误码
  • 深度学习| Deep Snake环境配置+训练+预测评估(超全面)
  • android 打包内容 安卓打包工具有哪些
  • C++学习:六个月从基础到就业——内存管理:new/delete操作符
  • 中间件--ClickHouse-10--海量数据存储如何抉择ClickHouse和ES?
  • Linux:线程概念与控制
  • PDF.js 生态中如何处理“添加注释\添加批注”以及 annotations.contents 属性
  • 观察者模式详解与C++实现