一. 文件上傳
這里我們使用request.getSession().getServletContext().getRealPath("/static")的方式來設置文件的存儲路徑,並存入數據庫中
request.getSession().getServletContext() 獲取的是Servlet容器對象,相當於tomcat容器了。getRealPath("/") 獲取實際路徑,“/”指代項目根目錄,所以代碼返回的是項目在容器中的實際發布運行的根路徑
這里我的文件就保存在了tomcat容器:C:\Users\Administrator\AppData\Local\Temp\tomcat-docbase.4580300150688111201.8080\static下
當我們部署到linux的時候,文件就保存在了/tmp/tomcat-docbase.6117940652560190565.8088/static/下
Controller:
/**
* 多文件上傳接口
* */
@ResponseBody
@RequestMapping(value = "/fileUpload", produces = "application/json;charset=UTF-8")
public JSONObject fileUpload(@RequestParam("file") MultipartFile[] files, HttpServletRequest request) throws Exception{
String serverName = "文件上傳";
VirgoLog.updateStep(CONTROLLER_NAME_DES,serverName);
List<FileManage> fileManages = fileService.fileUpload(files,request);
Map<String,Object> resMap = new HashMap<String,Object>();
//0:操作成功
resMap.put("code", ErrorCode.ERR_SUCCEED.getErrorCode());
resMap.put("desc",ErrorCode.ERR_SUCCEED.getErrorMessage());
resMap.put("fileInfo",fileManages);
return JSON.parseObject(JSONConvertor.toJSON(resMap));
}
service 文件上傳業務類
/**
* 文件上傳service
* @param files
* @throws Exception
*/
@Override
public void fileUpload(@RequestParam("file")MultipartFile[] files, HttpServletRequest request) throws Exception {
//文件命名
//保存時的文件名
for(int i=0;i<files.length;i++) {
//保存文件到本地文件,並保存路徑到數據庫
DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
Calendar calendar = Calendar.getInstance();
String fileName = df.format(calendar.getTime()) + files[i].getOriginalFilename();
log.log("文件的文件名為:" + fileName);
//保存文件的絕對路徑
String filePath = request.getSession().getServletContext().getRealPath("static/");
log.log("文件的絕對路徑:" + filePath);
FileManage fileManage = new FileManage();
try {
//上傳文件
FileUtil.uploadFile(files[i].getBytes(), filePath, fileName);
//保存到數據庫代碼,存入路徑以及文件名稱
} catch (IllegalStateException | IOException e) {
e.printStackTrace();
throw new ZDYException(ErrorCode.ERR_FILE_UPLOAD_FAIL);
}
}
}
文件上傳工具類
/**
* Created by hengyang4 on 2018/11/2.
*/
public class FileUtil {
//文件上傳工具類服務方法
public static void uploadFile(byte[] file, String filePath, String fileName) throws Exception{
File targetFile = new File(filePath);
if(!targetFile.exists()){
targetFile.mkdirs();
}
FileOutputStream out = new FileOutputStream(filePath+fileName);
out.write(file);
out.flush();
out.close();
}
}
二. 文件下載
/**
* 文件下載service
* @param fileId
* @throws Exception
*/
@Override
public String downloadFile(String fileId, HttpServletResponse response) throws Exception {
//這里要根據文件id在數據庫中查詢之前保存的文件信息 FileManage fileManage = fileManageMapper.selectByPrimaryKey(fileId);
//文件名
String fileName = fileManage.getFileName();
//文件的相對路徑
String path = fileManage.getFilePath();
InputStream inputStream = new FileInputStream(new File(path + fileName));
//如果文件不存在
if(inputStream == null){
throw new ZDYException(ErrorCode.ERR_NOT_FILE);
}
response.setHeader("content-type", "application/octet-stream");
response.setContentType("application/octet-stream");
try {
String name = java.net.URLEncoder.encode(fileName, "UTF-8");
response.setHeader("Content-Disposition", "attachment;filename=" + name );
} catch (UnsupportedEncodingException e2) {
e2.printStackTrace();
}
byte[] buff = new byte[1024];
BufferedInputStream bis = null;
OutputStream os = null;
try {
os = response.getOutputStream();
bis = new BufferedInputStream(inputStream);
int i = bis.read(buff);
while (i != -1) {
os.write(buff, 0, buff.length);
os.flush();
i = bis.read(buff);
}
} catch (FileNotFoundException e1) {
//e1.getMessage()+"系統找不到指定的文件";
throw new ZDYException(ErrorCode.ERR_NOT_FILE);
}catch (IOException e) {
e.printStackTrace();
} finally {
if (bis != null) {
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return "success";
}
這就是springboot中文件的上傳和下載,很簡單很快捷
