文件上传
spring-boot上传的文件,使用MultipartFile file对象来接收,具体的接口有以下几个
- @RequestParam("filename")MultipartFile file //使用MultipartFile来接受上传文件
- file.isEmpty() //判断上传文件是否为空
- file.getContentType() //获取文件类型
- file.getInputStream() //获取文件的输入流
- file.getSize() //获取文件的尺寸
- file.getOriginalFilename();//获取上传文件名称
- file.getBytes();//获取上传文件的byte[]
- file.transferTo(dest);//表示将上传文件写入目标文件
下面看一个例子,前台上传一个文件到这个接口,然后接口处理
package com.example.demo.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.UUID;
@RestController
@RequestMapping(value = "/upload")
public class UploadController {
@Value("${upload.dir}")
private String UPLOAD_DIR;
//上传单个文件
@PostMapping(value = "/file")
public String upload(@RequestParam("filename")MultipartFile file){
String subName="";
try{
subName = executeUpload(file);
}catch (Exception e){
e.getStackTrace();
return "上传失败:"+e.getMessage();
}
return "上传成功,文件名:"+subName;
}
//上传多个文件
@PostMapping(value = "/files")
public ArrayList<String> uploads(@RequestParam("filename") MultipartFile[] files){
ArrayList<String> filenames = new ArrayList<>();
if(files.length==0){
return filenames;
}
for(int i=0;i<files.length;i++){
if(!files[i].isEmpty()){
try{
String subName = executeUpload(files[i]);
filenames.add(subName);
}catch (Exception e){
e.getStackTrace();
return filenames;
}
}
}
return filenames;
}
//上传文件
private String executeUpload(MultipartFile file)throws Exception{
String filename = file.getOriginalFilename();//上传文件名称
String suffixName = filename.substring(filename.lastIndexOf("."));//上传文件后缀
String newFilename = UUID.randomUUID().toString().replace("-","")+suffixName;//新文件名
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String subName = "/"+sdf.format(new Date())+"/"+newFilename;
//如果目录不存在就创建
File dest = new File(UPLOAD_DIR+subName);
if(!dest.getParentFile().exists()){
dest.getParentFile().mkdirs();
}
file.transferTo(dest);//上传文件到目标
return subName;
}
//上传文件2
@PostMapping(value = "/file2")
public String file2(@RequestParam("filename") MultipartFile file)throws Exception{
if(file.isEmpty()){
return "请选择上传文件";
}
String filename = file.getOriginalFilename();
byte[] bytes = file.getBytes();
String result = excuteFile(filename,bytes);
return result;
}
//将数据保存为文件
private String excuteFile(String filename,byte[] bytes)throws Exception{
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String filePath = UPLOAD_DIR + "/"+sdf.format(new Date())+"/";
File targetFile = new File(filePath);
if(!targetFile.exists()){
targetFile.mkdirs();
}
String suffixName = filename.substring(filename.lastIndexOf("."));
String newFilename = UUID.randomUUID().toString().replace("-","")+suffixName;
FileOutputStream out = new FileOutputStream(filePath+newFilename);
out.write(bytes);
out.flush();
out.close();
return filePath+newFilename;
}
}
上传文件大小配置
上传文件大小的配置在application.properties中配置
- spring.http.multipart.max-file-size=1024MB 最大的上传限制容量
- spring.http.multipart.max-request-size=10MB 最大的请求容量