首页 > 其他分享 >SpringBoot实现文件上传的多种方式

SpringBoot实现文件上传的多种方式

时间:2023-09-28 10:12:01浏览次数:45  
标签:文件 存储 SpringBoot OSS 上传 oss

我们平时在项目开发过程中,会遇到许多的文件上传与下载的需求,今天我们就来梳理一下文件上传的代码实现,基于SpringBoot 快速搭建服务,集成文件上传功能,包括传统的文件上传方式,也拓展OSS对象存储方式。项目类型是Maven项目

一、引入web依赖

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

 

 

二、application.yml配置

在application.yml设置文件上传大小,以及文件上传路径和显示路径。maxFileSize 是单个文件大小,maxRequestSize是设置总上传的数据大小,文件配置大小的规则就是根据你的需求来设置。比如,如果只是上传图片,不管是单图上传还是多图上传,几十兆基本都能满足要求,如果是上传视频,则文件大小基本都是上百兆。

 

 

这里有一个需要注意的就是application.yml里面的配置需要根据SpringBoot的版本来定,上面配置的是当前比较常用的版本,基于SpringBoot 2.x,但如果是SpringBoot 1.x,比如1.5版本,可以参考以下的配置(区别在于一个是http,一个是servlet

 

 

除了在application.yml 中配置变量,也可以直接在Java代码里面配置:

/** * @Description 上传文件配置 * @author 编程侠 * @param * @param MultipartConfigElement */ public MultipartConfigElement multipartConfigElement() { MultipartConfigFactory factory = new MultipartConfigFactory(); //文件最大30M,DataUnit提供五种类型B,KB,MB,GB,TB factory.setMaxFileSize(DataSize.of(30, DataUnit.MEGABYTES)); /// 设置总上传数据总大小200M factory.setMaxRequestSize(DataSize.of(300, DataUnit.MEGABYTES)); return factory.createMultipartConfig(); }

 

 

三、文件上传

1、前端代码

最简单的就是使用经典的form表单和input上传。 设置form的aciton为后端请求,enctype=“multipart/form-data”,type=‘post’。

 

 

说明:

(1)enctype 设置 multipart/form-data ,原因:指定传输数据为二进制类型,比如图片、mp3、文件。 这个一般文件上传时用。它告诉我们传输的数据要用到多媒体传输协议,由于多媒体传输的都是大量的数据,所以规定上传文件必须是post方法,type="file",浏览器会把整个表单以控件为单位分割。

(2)一般的上传只需要上传文件即可,但时候我们需要额外传参,以此来绑定文件跟用户的关联关系等,这个时候你就可以设置隐藏域,然后在后端使用request.getParameter 接收。

2、后端代码

Controller层代码实现,主要思路就是上传文件到指定的目录下,上传成功拼接显示地址(直接使用上传的地址无法在前端展示,是通过显示路径拼接后展示的),就可以在页面上进行展示了。

 

 

如果是多文件上传,上传的方法做出适当的调整。因为接收的文件对象不再是一个了,改用数组接收。

 

 

四、对象oss存储

除了传统的存储方式,现在对象oss存储也非常的流行,市场上常用的有阿里云、华为云,七牛云等,为什么需要使用到对象存储呢?oss存储是很多大型互联网公司针对图片、文件以及其他内容的存储使用的一种较为流行的方式,它以响应快,性能高,成本低、安全系数高深受业界大佬推崇。我们这里以阿里云OSS文件存储为例,其他家的接入方法类似。

阿里云OSS上传文件步骤:

1、开通阿里云OSS服务,创建bucket,创建AccessKey,拿到阿里云OSS相关的配置文件,拿到配置文件后,我们就可以放入到项目的配置文件application.yml中。

 

 

2、引入项目需要的依赖,maven项目直接在pom.xml中添加依赖。

<dependency>

<groupId>com.aliyun.oss</groupId>

<artifactId>aliyun-sdk-oss</artifactId>

</dependency>

 

 

3、创建一个读取配置的类,后续业务处理上传到OSS时,从该配置类获取参数。

 


 

4、业务处理,一般完整的业务处理流程是:拿到生成文件的本地临时路径和文件数据。在本地临时目下生成文件。将本地文件上传到OSS,返回oss的全路径;删除本地临时目录、文件。

 

 

 

参考文章:http://blog.ncmem.com/wordpress/2023/09/28/springboot%e5%ae%9e%e7%8e%b0%e6%96%87%e4%bb%b6%e4%b8%8a%e4%bc%a0%e7%9a%84%e5%a4%9a%e7%a7%8d%e6%96%b9%e5%bc%8f/

欢迎入群一起讨论

 

 

 

标签:文件,存储,SpringBoot,OSS,上传,oss
From: https://www.cnblogs.com/songsu/p/17735052.html

相关文章

  • 前端js下载文件方式记录
    方式一:前端组装数据进行下载如下方式://创建数据vardata="Hello,world!";//将数据转换为Blob对象varblob=newBlob([data],{type:"text/plain;charset=utf-8"});//创建一个URL对象,指向Blob对象varurl=URL.createObjectURL(blob);//创建一个下......
  • vue下载PDF文件到本地
    方法1.downloadPDF(fileName){//要下载的文件路径varfileUrl='./file/'+fileName;//创建一个隐藏的<a>元素,用于下载文件vara=document.createElement('a');a.href=fileUrl;a.download=fileName;//可以自定义下载文件的名称a.style.displa......
  • pageofficeV6.0另存文件为HTML格式
    转载:另存文件为HTML格式另存文件为HTML格式注意本文中展示的代码均为关键代码,复制粘贴到您的项目中,按照实际的情况,例如文档路径,用户名等做适当修改即可使用。在实际项目开发中,有时需要满足一些没有安装Office软件的客户端电脑或者手机端浏览文档的需求。为了实现这个功能,我们......
  • PHPStudy hosts文件可能不存在或被阻止打开及同步hosts失败问题
    在使用PHPStudy建站包时,有时会遇到同步hosts失败的问题,可能是因为hosts文件不存在或被阻止打开。这个问题通常可以通过以下几个步骤解决:步骤一:检查hosts文件是否存在首先,我们需要检查一下hosts文件是否存在。在Windows系统中,hosts文件位于C:\Windows\System32\drivers\etc\目录......
  • Web-入门-SpringBoot快速入门 创建springboot web项目
    web入门spring官网spring发展到今天已经形成了一种开发生态圈,spring提供了若干个子项目,为每个项目用于完成特定的功能。这些框架都是基于一个基础框架:直接基于SpringFramework基础框架进行开发会有两大难题:1.配置繁琐。2.入门难度大。所以spring家族意识到了这一点,......
  • linux 中批量输出指定目录的磁盘占用和文件数目
     001、磁盘占用(base)[root@pc1test1]#lstest1test2test3(base)[root@pc1test1]#find$PWD-typed##查出所有目录/home/test1/home/test1/test1/home/test1/test1/test/home/test1/test2/home/test1/test3(base)[root@pc1test1]#find$PWD......
  • 使用SpringBoot开发一个POST接口
    SpringBoot项目的分层SpringBoot框架项目一般分为五层:View层:向用户展示页面Controller层:前后端交互层,接收前端请求,调用Service层中的方法,接收Service层返回的数据并将其返回到前端。Service层:存放业务处理的逻辑,以及一些操作数据库的接口Mapper层:也可以成为DAO层,是数......
  • 在deepin上使用Fleet开发SpringBoot 3.0.0项目
    前言Fleet被称为是由JetBrains打造的下一代IDE,目前出于公测状态,可以免费下载使用。SpringBoot3.0.0最小支持是JDK17,这或许是对于JDK8的断舍离迈出的重大一步。出于对新工具和新技术的好奇,我开始尝试在deepin上用Fleet开发一个SpringBoot3.0.0项目,继续我的SpringBoot学习......
  • VScode对于json格式文件允许添加注释设置(永久有 效)
    如果你想让VSCode永久地将所有的.json文件都识别为JSONC,你可以通过修改VSCode的全局设置来实现。以下是具体步骤:在VSCode中按下Ctrl+,来打开设置(或者在菜单中选择"File"->"Preferences"->"Settings")。在搜索框中输入“files.associations”。在"Files:Associations......
  • pandas读取一个文件夹下所有excel表格中的第三个sheet,怎么破?
    大家好,我是皮皮。一、前言前几天在Python最强王者交流群【wen】问了一个Python自动化办公的问题,一起来看看吧。请教,pandas读取一个文件夹下所有excel表格中的第三个sheet,但是不同的excel的第三个sheetname也不同,怎么设定参数比较方面呢?二、实现过程这里【哎呦喂 是豆子~】......