springboot檔案上傳
阿新 • • 發佈:2018-12-09
1.application.properties檔案
#訪問超市時間的設定
ribbon.ConnectTimeout=60000
ribbon.ReadTimeout=60000
# 開啟多檔案上傳
spring.servlet.multipart.enabled=true
spring.servlet.multipart.file-size-threshold =0
#單個檔案大小
#spring.http.multipart.maxFileSize=10MB
#設定總上傳的資料大小
#spring.http.multipart.maxRequestSize=10MB
#升級到2.0後需要改成
#單個檔案大小
spring.servlet.multipart.max-file-size=10Mb
#設定總上傳的資料大小
spring.servlet.multipart.max-request-size=10Mb
#上傳路徑
upload_path=D:/file_statics
#下載路徑
download_path=D:/file_statics
2.controller程式碼
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException ;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.StringUtils;
import org.springframework .beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import com.vinord.common.model.ResultView;
import com.vinord.common.util.Constains;
@RestController
public class FileUploadController
{
@Value("${upload_path}")
private final String upload_path ="D:/file_statics";
@Value("${download_path}")
private final String download_path ="D:/file_statics";
/**
* 單個檔案上傳
* @param file
* @param redirectAttributes
* @return
*/
@RequestMapping("uploadFile")
public ResultView singleFileUpload(@RequestParam("file") MultipartFile file,RedirectAttributes redirectAttributes) {
ResultView result = new ResultView();
if (file.isEmpty()) {
redirectAttributes.addFlashAttribute("message", "請選擇檔案進行上傳");
result.setCode(Constains.STATUS_ZERO);
result.setMsg("請選擇檔案進行上傳!");
return result;
}
try {
byte[] bytes = file.getBytes();
String filename = file.getOriginalFilename();
String name = filename.substring(0,filename.lastIndexOf("."));
String formatDate = System.currentTimeMillis()+"";
int index = filename.indexOf(".");
String savefilename = name + formatDate+ filename.substring(index);
Path path = Paths.get(upload_path+ File.separator+savefilename);
Files.write(path, bytes);
redirectAttributes.addFlashAttribute("message","成功上傳檔案: '" + file.getOriginalFilename() + "'");
result.setCode(Constains.STATUS_ONE);
result.setMsg("上傳成功");
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
/**
* 多個檔案上傳
* @param files
* @return
*/
@ResponseBody
@RequestMapping(value = "/upload/batch", method = RequestMethod.POST)
public ResultView batchUpload(@RequestParam("files")MultipartFile[] files) {
ResultView result = new ResultView();
String uploadedFileName = Arrays.stream(files).map(x -> x.getOriginalFilename())
.filter(x -> !StringUtils.isEmpty(x)).collect(Collectors.joining(" , "));
if (StringUtils.isEmpty(uploadedFileName)) {
result.setCode(Constains.STATUS_ZERO);
result.setMsg("檔案上傳失敗,檔案為空!");
return result;
}
try {
saveUploadedFiles(Arrays.asList(files));
} catch (IOException e) {
result.setCode(Constains.STATUS_ZERO);
result.setMsg("檔案上傳異常"+e.getMessage());
return result;
}
result.setCode(Constains.STATUS_ONE);
result.setMsg("上傳成功");
return result;
}
private void saveUploadedFiles(List<MultipartFile> files) throws IOException {
for (MultipartFile file : files) {
if (file.isEmpty()) {
continue;
}
byte[] bytes = file.getBytes();
String filename = file.getOriginalFilename();
String name = filename.substring(0,filename.lastIndexOf("."));
String formatDate = System.currentTimeMillis()+"";
int index = filename.indexOf(".");
String savefilename = name + formatDate+ filename.substring(index);
Path path = Paths.get(upload_path+ File.separator+ savefilename);
Files.write(path, bytes);
}
}
/**
* 下載
* @param res
* @throws IOException
*/
@RequestMapping("download")
public void download(HttpServletResponse res) throws IOException {
String fileName = "CustomLogControl1536898060373.java";
res.setHeader("content-type", "application/octet-stream");
res.setContentType("application/octet-stream");
res.setHeader("Content-Disposition", "attachment;filename=" + fileName);
byte[] buff = new byte[1024];
BufferedInputStream bis = null;
OutputStream os = null;
try {
os = res.getOutputStream();
bis = new BufferedInputStream(new FileInputStream(new File(download_path+ File.separator+fileName)));
int i = bis.read(buff);
while (i != -1) {
os.write(buff, 0, buff.length);
os.flush();
i = bis.read(buff);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (bis != null) {
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}