SpringBoot 上传文件(单个、多个文件)

说明

用Spring的 MultipartFile在Springboot 中实现上传单个文件(多个文件)

多文件上传,大量文件时,防止文件名相同,重新修改存储文件名。


html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<h1>文件上传</h1>
<form method="post" action="/upload2.do" enctype="multipart/form-data">
	<input type="file"  name="files" multiple="multiple"/><br/><br/>
	<input type="submit" value="上传" /><br/>
</form>
</body>
</html>

controller

package com.example.springBootdemo.controller;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import com.example.springBootdemo.utils.FileUtils;
/**
 * 单文件、多文件上传
 * @author luolei
 * @date 2019年1月31日
 */
@RestController
public class FileOperationController {

	/**
	 * 单文件上传
	 * @param file
	 * @return
	 * @throws IllegalStateException
	 * @throws IOException
	 * String
	 */
	@PostMapping("/upload.do")
	//@RequestMapping(value="/upload.do", method = RequestMethod.POST)
	//上传的文件会转换成MultipartFile对象,file名字对应html中上传控件的name
	public String upload(MultipartFile file) throws IllegalStateException, IOException{
		//取得当前上传文件的文件名称
		String originalFilename = file.getOriginalFilename();
		//transferTo是保存文件,参数就是要保存到的目录和名字
		String filePath = "C:\\Users\\Administrator\\Desktop\\images\\";
		file.transferTo(new File(filePath + originalFilename));
		System.out.println("文件类型:"+file.getContentType());	
		System.out.println("原文件名:"+originalFilename);
		System.out.println("是否为空:"+file.isEmpty());
		System.out.println("文件大小:"+file.getSize());		
		return "文件上传完毕";
	}
	/**
	 * 多文件上传,大量文件时,防止文件名相同,重新修改存储文件名
	 * @param files
	 * @return
	 * @throws IOException
	 * String
	 */
	@PostMapping("/upload2.do")
	//@RequestMapping(value="/upload2.do", method = RequestMethod.POST)
	//上传的文件会转换成MultipartFile对象,file名字对应html中上传控件的name
	public String upload2(MultipartFile[] files) throws IOException{
		if(files.length == 0){
			return "请选择要上传的文件";
		}
		for (MultipartFile multipartFile : files) {
			if(multipartFile.isEmpty()){
				return "文件上传失败";
			}
			byte[] fileBytes = multipartFile.getBytes();
			String filePath = "C:\\Users\\Administrator\\Desktop\\images\\";
			//取得当前上传文件的文件名称
			String originalFilename = multipartFile.getOriginalFilename();
			//生成文件名
			String fileName = UUID.randomUUID() +"&"+ originalFilename;
			FileUtils.uploadFile(fileBytes, filePath, fileName);
		}

		return "文件上传完毕";
	}

}

FileUtils 文件上传工具类

package com.example.springBootdemo.utils;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
/**
 * 文件工具类
 * @author luolei
 * @date 2019年1月31日
 */
public class FileUtils {
	/**
	 * 文件上传方法
	 * @param file 文件byte[]
	 * @param filePath 文件上传路径
	 * @param fileName 文件保存路径
	 * @throws IOException 
	 * @throws Exception
	 * void
	 */
    public static void uploadFile(byte[] file, String filePath, String fileName) throws IOException{

        File targetFile = new File(filePath);
        if(!targetFile.exists()){
            targetFile.mkdirs();
        }
        FileOutputStream out = new FileOutputStream(filePath + fileName);
        out.write(file);
        out.flush();
        out.close();
   }
}

application.properties

在Springboot中可以直接在配置文件中覆盖默认的静态资源路径的配置信息

在application.properties中配置 spring.resources.static-locations可以查看访问我们上传的文件。

#单文件限制大小
spring.http.multipart.maxFileSize=10MB
#一次请求限制大小
spring.http.multipart.maxRequestSize=500MB

#在Springboot中可以直接在配置文件中覆盖默认的静态资源路径的配置信息
#配置静态资源目录,以逗号分隔多个目录,
#加file:是因为后面指定的是一个具体的硬盘路径,其他的使用classpath指的是系统环境变量
spring.resources.static-locations=classpath:/static/,file:C:/Users/Administrator/Desktop/images/

效果

访问图片、下载文件

 

  • 7
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring Boot中进行文件时,可以使用FileUpload组件实现上处理。在控制器中,可以使用MultipartFile类来接收单个文件。如果需要进行多个文件的上,可以通过MultipartHttpServletRequest来接收文件。 然而,当面临高并发上文件的情况时,需要考虑一些性能和安全性问题。首先,需要配置合适的上文件大小限制。在application.yml文件中,可以通过设置max-file-size和max-request-size来限制单个文件和总请求文件的大小。此外,还可以设置file-size-threshold来决定何时将文件内容写入磁盘,以及设置location来指定上的临时目录。 为了进一步提高上文件的性能,可以考虑使用分布式文件系统或对象存储来存储上文件,以减轻单个服务器的负载。另外,可以使用负载均衡技术将上请求分发到多个服务器上,以实现并发处理。还可以使用缓存技术来提高文件的读写性能。 总结来说,对于高并发上文件的情况,需要合理配置上文件大小限制和临时目录,并考虑使用分布式文件系统、负载均衡和缓存等技术来提高性能和可扩展性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [【SpringBoot文件(基础上、上文件限制、上多个文件)](https://blog.csdn.net/qq_41569732/article/details/106602280)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值