首页 > 其他分享 >文件上传功能模块——对象存储

文件上传功能模块——对象存储

时间:2024-03-11 20:55:53浏览次数:21  
标签:文件 存储 对象 前端 功能模块 分片 上传

对象存储功能

在文件上传业务中,我们通常把这个功能将他拆分成对象存储微服务。这样前端发起请求,网关就会把请求路由到对应的对象存储微服务,这样就不需要再保险业务开发上传功能。

业务流程

前端的请求通过网关路由到对象存储微服务中,对象存储将提供的文件上传到阿里云中,并返回文件记录对象,和保存的主业务建立关联,完成业务,大体流程是这样的,在这其中还有很多问题产生。

注意问题

1.文件大的情况下,长时间占用带宽问题

OSS文件上传方式有很多,简单上传,分片上传,追加上传,断点续传上传等,在业务中,我们采用简单上传小文件,分片上传大文件。

  • 简单上传

前端发送请求数据和参数到网关断言路由到对象存储微服务,然后微服务发送文件数据到对象存储,返回一个文件存储信息,传输完毕后,微服务将文件记录存到数据库中,同时向前端返回文件记录

  • 分片文件

分片文件上传方式,主要有三步初始化,分片上传,最后合并文件。首先前端向后端发起初始化请求,网关路由到对象存储微服务,微服务向对象存储通知,对象存储会返回上传文件的标识,服务会将文件记录存储到数据库中,然后将文件标识放到文件记录对象返回给前端通知已经完成初始化。

前端将文件分片进行上传文件数据,每次都会带着上传标识,微服务将分片的文件上传到对象存储中,然后对象存储返回一个分片信息,将记录分片信息的json字符串返回给前端,并将分片记录到数据库中。

前端收集分片上传中后端返回的分片信息json数组,然后将其放到参数里请求后端合并分片,在对象存储微服务中通知对象存储合并分片,对象存储会返回一个是否合并成功,合并成功则删除数据库的文件分片记录。

2.由于各种原因没有提交业务,导致业务没有绑定数据库文件信息,如何处理垃圾文件?

处理垃圾文件主要有两种方案。

  • 定时清理:使用XXL-JOB组件定时轮询数据库信息,如果发现文件的创建时间是10分钟前,并且没有绑定业务id,则认为是垃圾文件进行删除
  • 延迟删除:主要使用rabbitMQ实现,文件上传后,发送延迟队列到rabbitmq中,10分钟后消费消息,检测此文件是否关联业务id,为空则认为是垃圾文件

3.如何排查OSS文件上传失败的问题?

  1. 检查本地和OSS网络是否正常,可以使用ping命令测试与OSS网络连通性。
  2. 检查上传文件的大小是否超过限制。在oss控制台中,简单上传,表单上传,追加上传等方式上传文件,文件的大小不能超过5GB。分片上传的方式上传的单个文件,大小不能超过48.8T
  3. 检查当前上传文件的账户是否有上传文件的权限
  4. 也可以检查OSS配置文件是否正确,地址等是否错误

4.分片上传失败的解决方式?

在上传大文件到文件存储的过程中,可能因为网络问题,程序异常退出等问题导致上传部分失败,甚至重复多次依旧无法完成上传,这个时候就需要断点续传的方式,某一分片上传失败,再次上传时就会从返回的文件记录的断点继续上传,无需重新上传所有分片。

5.访问OSS出现网络异常怎么解决?

网络异常问题可能是所处的网络环境在运营商网络边缘节点,多数网络异常是因为客户端网络不稳定导致的。

解决方案:

  • 开启CDN加速,利用CDN边缘加速节点,减少手机或PC网络对运营商网络的依赖
  • 采用分片断点上传,每个分片大小可以设置不超过1MB
  • 增大超时时间,并开启失败重传机制

标签:文件,存储,对象,前端,功能模块,分片,上传
From: https://www.cnblogs.com/yifan0820/p/18067022

相关文章

  • typeorm mysql 存储base64
    在TypeORM中使用MySQL存储Base64数据时,可以将Base64字符串转换为二进制数据并存储在BLOB字段中。以下是一个简单的例子:首先,确保你的实体有一个适当的列类型,比如blob。import{Entity,PrimaryGeneratedColumn,Column}from'typeorm';@Entity()exportclassMyEntity{@Pr......
  • c# 上传压缩包 解压,遍历文件夹和文件
    <body><formid="form1"runat="server"><div><asp:FileUploadID="FileUpload1"runat="server"/><asp:buttonID="Button1"runat="server"text="上传&q......
  • Nestjs系列 文件上传(一)
    Express中的文件上传Nest的文件上传是基于Express中间件multer实现的,所以需要先了解下multer包的使用。npminit-y#创建一个package.jsonnpminstallexpressmultercors#安装依赖包cors是处理跨域用的。创建index.js文件,并写入内容constexpress=re......
  • django中的上传文件
    用django写接口的时候,不可避免的会涉及到上传文件环境python版本django版本djangorestframework版本drf-spectacular版本3.10.43.23.14.00.27.1编写模型fromdjango.dbimportmodelsclassTimeMixin(models.Model):"""时间混入类,为模型添加创......
  • 代码实现上传Base64图片到七牛云OSS
    依赖<!--https://mvnrepository.com/artifact/com.qiniu/qiniu-java-sdk--><dependency> <groupId>com.qiniu</groupId> <artifactId>qiniu-java-sdk</artifactId> <version>7.14.0</version></dependency><......
  • 解决uni-app在App端上传图片时路径转Base64的问题
    解决uni-app在App端上传图片时路径转Base64的问题在用uni-app开发项目的时候大家都会遇到这么一个问题,就是上传图片时在App上拿到的是文件路径,然而后端要接收的却是Base64字符串,这就尴尬了,在App端又无法调用WebApi(例如:BlobfileReader等),自己写插件的话又很麻烦,因此我找了很久才......
  • 存储器的性能指标
    MAR位数反映存储单元的个数(最多支持多少个)MDR位数=存储字长=每个存储单元的大小     总容量=存储单元个数✖存储字长 bit      =存储单元个数✖存储字长➗8 byte(1byte=8bit) 例:MAR为32位,MDR为8位    总容量=2^32*......
  • 第15章_存储过程与函数
    第15章_存储过程与函数讲师:尚硅谷-宋红康(江湖人称:康师傅)官网:http://www.atguigu.comMySQL从5.0版本开始支持存储过程和函数。存储过程和函数能够将复杂的SQL逻辑封装在一起,应用程序无须关注存储过程和函数内部复杂的SQL逻辑,而只需要简单地调用存储过程和函数即可。1.存储过......
  • Go Gin框架实现上传100G超大文件
    GoGin框架实现上传100G超大文件原创 云原生Go 源自开发者 2024-02-0718:11 广东 1人听过源自开发者专注于提供关于Go语言的实用教程、案例分析、最新趋势,以及云原生技术的深度解析和实践经验分享。135篇原创内容公众号在本文中,我们将深入探讨如......
  • 使用AT+MQTT指令连接华为云实现数据上传
    1准备工作硬件设备模块:ESP-01-S固件烧录工具:ESP8266下载器串口调试工具:VOFA+参考文章:stm32+AT指令+ESP8266接入华为云物联网平台并完成属性上报与下发的命令处理2固件更新2.1为什么要重新安装固件由于ESP-01-S模块出厂没有集成MQTT指令,故需要自己下载固件包,详见官网固......