Spring Boot文件上传与下载
1.文件上传
@Controller
public class FileUploadController {
/**
* 单文件上传
*
* @param request
* @param multipartHttpServletRequest
* @return
*/
@RequestMapping(path = { "file" }, method = { RequestMethod.POST })
@ResponseBody
public String fileUpload(HttpServletRequest request, MultipartHttpServletRequest multipartHttpServletRequest) {
MultipartFile file = multipartHttpServletRequest.getFile("file");
String originalFilename = file.getOriginalFilename();
System.out.println("上传文件的原文件名为 : " + originalFilename);
String[] split = originalFilename.split("\\.");
String fileType = split.length > 1 ? split[split.length - 1] : null;
System.out.println("文件类型为 : " + split[split.length - 1]);
String fileName = UniqueUtil.generate();
String name = null;
if (null == fileType || "".equals(fileType)) {
// 无文件类型
name = "D:\\workspace\\SpringBootDemo\\" + fileName;
} else {
name = "D:\\workspace\\SpringBootDemo\\" + fileName + "." + fileType;
}
FileOutputStream out = null;
FileInputStream in = null;
try {
out = new FileOutputStream(name);
in = (FileInputStream) file.getInputStream();
byte[] buffers = new byte[1024];
while (in.read(buffers) != -1) {
out.write(buffers);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
in.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return "上传成功!";
}
/**
* 多文件上传
*
* @param multipartHttpServletRequest
* @return
*/
@RequestMapping(path = { "multiFile" }, method = { RequestMethod.POST })
@ResponseBody
public String multiFile(MultipartHttpServletRequest multipartHttpServletRequest) {
Iterator<String> fileNames = multipartHttpServletRequest.getFileNames();
while (fileNames.hasNext()) {
List<MultipartFile> files = multipartHttpServletRequest.getFiles(fileNames.next());
Iterator<MultipartFile> iterator = files.iterator();
while (iterator.hasNext()) {
String saveFile = saveFile(iterator.next());
System.out.println("上传文件成功 : " + saveFile);
}
}
return null;
}
private String saveFile(MultipartFile file) {
String originalFilename = file.getOriginalFilename();
System.out.println("上传文件的原文件名为 : " + originalFilename);
String[] split = originalFilename.split("\\.");
String fileType = split.length > 1 ? split[split.length - 1] : null;
System.out.println("文件类型为 : " + split[split.length - 1]);
String fileName = UniqueUtil.generate();
String name = null;
if (null == fileType || "".equals(fileType)) {
// 无文件类型
name = "D:\\workspace\\SpringBootDemo\\" + fileName;
} else {
name = "D:\\workspace\\SpringBootDemo\\" + fileName + "." + fileType;
}
FileOutputStream out = null;
FileInputStream in = null;
try {
out = new FileOutputStream(name);
in = (FileInputStream) file.getInputStream();
byte[] buffers = new byte[1024];
while (in.read(buffers) != -1) {
out.write(buffers);
}
return fileName + fileType;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
in.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
}
2.文件下载
@Controller
public class FileController {
@RequestMapping(path = { "download" }, method = { RequestMethod.GET })
public void download(String fileName, HttpServletResponse response) {
response.setHeader("content-type", "application/octet-stream");
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
byte[] buffers = new byte[1024];
BufferedInputStream in = null;
OutputStream out = null;
try {
out = response.getOutputStream();
in = new BufferedInputStream(new FileInputStream("D:\\workspace\\SpringBootDemo\\" + fileName));
while (in.read(buffers) != -1) {
out.write(buffers);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
in.close();
out.close();
} catch (Exception e2) {
// TODO: handle exception
}
}
}
}