Spring Boot 实现文件上传和下载 以及上传后访问文件

本文详细介绍了如何在SpringBoot项目中实现文件上传和下载功能,并配置静态资源路径以访问上传后的文件,包括单个和多个文件的上传,以及文件访问的配置。通过Postman进行了上传测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                                Spring Boot 实现文件上传和下载 以及上传后访问文件

 

一、创建Spring Boot项目

1、https://start.spring.io/

2、如下: (安装STS后可以直接从IDE中创建

 

二、增加引入web支持

  <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

 

三、具体代码实现

1、application.properties 文件增加配置如下

# 单个文件的最大值
spring.servlet.multipart.max-file-size=70MB
# 上传文件总的最大值
spring.servlet.multipart.max-request-size=120MB

# 上传文件 存储根目录
userfile.basedir = C:/D/uplad/

2、创建 UploadController 实现文件上传

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

/**
 * description: 文件上传Controller
 * @version v1.0
 * @author w
 * @date 2021年3月16日上午11:19:34
 **/
@RestController
public class UploadController {

	/**
	 *  上传文件目录
	 */
	@Value(value = "${userfile.basedir}")
	private String userfileDir ;
	
	/**
	 * description: 上传单个文件
	 * @param file
	 * @return Map<String,Object>
	 * @version v1.0
	 * @author w
	 * @date 2021年3月16日 上午11:48:38
	 */
	@RequestMapping(value = "/upload")
	public Map<String , Object> upload(MultipartFile file){
		Map<String, Object> map = new HashMap<String, Object>();
		if(null == file) {
			map.put("500", "上传文件不能为空!");
			return map;
		}
		String originalFilename = file.getOriginalFilename();
		File dest = new File(userfileDir);
		if(!dest.exists() && !dest.isDirectory()) {
			dest.mkdirs();
		}
		try {
			file.transferTo(new File(dest , originalFilename));
		} catch (IllegalStateException | IOException e) {
			e.printStackTrace();
			map.put("500", "上传失败!");
			map.put("错误信息如下", e);
			return map ;
		}
		map.put("200", "上传成功");
		map.put("fileName", originalFilename);
		return map ;
	}
	
	/**
	 * description: 上传多个文件
	 * @param files
	 * @return Map<String,Object>
	 * @version v1.0
	 * @author w
	 * @date 2021年3月16日 上午11:49:03
	 */
	@RequestMapping(value = "/uploads")
	public Map<String , Object> uploads(MultipartFile files[]){
		Map<String, Object> map = new HashMap<String, Object>();
		if(null == files || files.length == 0) {
			map.put("500", "上传文件不能为空!");
			return map;
		}
		
		List<String> list = new ArrayList<String>();
		for (MultipartFile file : files) {
			String originalFilename = file.getOriginalFilename();
			File dest = new File(userfileDir);
			if(!dest.exists() && !dest.isDirectory()) {
				dest.mkdirs();
			}
			try {
				file.transferTo(new File(dest , originalFilename));
			} catch (IllegalStateException | IOException e) {
				e.printStackTrace();
				map.put("500", "上传失败!");
				map.put("错误信息如下", e);
				return map ;
			}
			list.add(originalFilename);
		}
		map.put("200", "上传成功");
		map.put("fileName", list);
		return map ;
	}
}

 

四、实现上传后的文件访问

1、创建 FileAccessConfig 类,增加静态路径配置,实现上传后的文件访问

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * description: 配置上传后的文件访问路径
 * @version v1.0
 * @author w
 * @date 2021年3月16日下午2:41:37
 **/
@Configuration
public class FileAccessConfig implements WebMvcConfigurer {
	
	/**
	 *  上传文件目录
	 */
	@Value(value = "${userfile.basedir}")
	private String userfileDir ;
	
	
	@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry) {
		// “file:” 为固定内容,经测试发现,不可更改
		registry.addResourceHandler("/userfiles/**").addResourceLocations("file:".concat(userfileDir));
	}
	
}

 

五、测试

1、测试步骤略,推荐使用 Postman 测试。

2、Postman进行文件上传测试

3、简要步骤如下:

 

六、总结

1、https://start.spring.io/ 创建Spring Boot项目

2、引入web支持pom

3、具体上传代码实现 和 SpringMVC 上传一样

4、静态路径配置,实现上传后的文件访问

5、文件下载,略, 可以点击这里

 

【支持视频文件上传,且支持截取预览图片,略】

 

参考资料: 上传后文件访问

springMVC实现文件下载

SpringMVC+Postman进行文件上传测试

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值