前言
文件的上传下载功能算是一个比较常用的功能,前段时间在着急忙慌的做项目的时候遇到这需求,现在使用Springboot自己总结一下。
直接上代码 编写Controller
package com.example.demotest.controller;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import com.example.demotest.utils.Constants;
import lombok.extern.slf4j.Slf4j;
@Controller
@Slf4j
public class FileController {
/**
* 上传单个文件
*
* @param file
* @return
*/
@RequestMapping("/upload")
public String fileUpload(@RequestParam("fileName") MultipartFile file) {
if (file.isEmpty()) {
return "false";
}
String fileName = file.getOriginalFilename();
String path = Constants.LOCAL_PATH + fileName;
File tarFile = new File(path);
if (!tarFile.getParentFile().exists()) {
tarFile.getParentFile().mkdirs();
}
try {
if (tarFile.createNewFile()) {
file.transferTo(tarFile);
}
log.info("upload success");
} catch (Exception e) {
log.error("FileUpload error {}", e.getMessage());
return "false";
}
return "true";
}
/**
* 下载单个文件
*
* @param response
* @param fileName
* @return
*/
@RequestMapping("/download")
public String download(HttpServletResponse response, @RequestParam("fileName") String fileName) {
File file = new File(Constants.LOCAL_PATH + fileName);
if (file.exists()) {
response.setContentType("application/force-download;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition", "attachment;fileName =" + fileName);
byte[] buffer = new byte[1024];
try (FileInputStream inputStream = new FileInputStream(file);
OutputStream outStream = response.getOutputStream();
BufferedInputStream buffStream = new BufferedInputStream(inputStream);) {
int i = 0;
while ((i = buffStream.read(buffer)) != -1) {
outStream.write(buffer);
outStream.write(buffer, 0, i);
}
return "download success";
} catch (Exception e) {
log.error("download error {}", e.getMessage());
}
}
return null;
}
/**
* 上传多个文件
*
* @param request
* @return
*/
@RequestMapping("/batchUpload")
public String batchUpload(HttpServletRequest request) {
List<MultipartFile> files = ((MultipartHttpServletRequest) request).getFiles("fileName");
if (files.isEmpty()) {
return "false";
}
for (MultipartFile file : files) {
String fileName = file.getOriginalFilename();
if (file.isEmpty()) {
return "false";
} else {
try {
File dest = new File(Constants.LOCAL_PATH + fileName);
if (!dest.getParentFile().exists()) {
dest.getParentFile().mkdirs();
}
if (dest.createNewFile()) {
file.transferTo(dest);
}
} catch (Exception e) {
log.error("upload error fileName = {}", fileName);
return "false";
}
}
}
return "true";
}
}