package com.ccid.vehiclemanage.certification.common.service; import com.ccid.vehiclemanage.certification.common.result.ServerResponse; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.UnsupportedEncodingException; /** * 处理文件上传/预览/下载 * */ public interface FileService { ServerResponse fileUpload(MultipartFile file, String filePath, HttpServletRequest request) throws UnsupportedEncodingException ; ServerResponse getFile(String url, HttpServletResponse response) throws Exception ; ServerResponse downloadFile(String url, HttpServletResponse response) throws Exception ; }
package com.ccid.vehiclemanage.certification.common.service.impl; import com.ccid.vehiclemanage.certification.common.result.ServerResponse; import com.ccid.vehiclemanage.certification.common.service.FileService; import com.ccid.vehiclemanage.certification.common.util.DateUtil; import com.google.common.collect.Maps; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.util.Map; @Service public class FileServiceImpl implements FileService { /** * 多文件上传 * @param files * @param filePath * @param request * @return data 存放数据为 Map<String, String> 类型,key 是文件名,value 是文件路径加文件名 * @throws UnsupportedEncodingException */ public ServerResponse fileListUpload(MultipartFile[] files, String filePath, HttpServletRequest request) throws UnsupportedEncodingException { Map<String, String> uploadListMap = Maps.newHashMapWithExpectedSize(files.length); //循环上传单个文件 for (MultipartFile file : files){ ServerResponse serverResponse = fileUpload(file, filePath, request); if (serverResponse.isSuccess()){ uploadListMap.put(file.getOriginalFilename(), (String) serverResponse.getData()); }else{ return serverResponse; } } return ServerResponse.createBySuccess("上传成功!" , uploadListMap); } public ServerResponse fileUpload(MultipartFile file, String filePath, HttpServletRequest request) throws UnsupportedEncodingException { request.setCharacterEncoding("UTF-8"); String fileName = file.getOriginalFilename(); String timeString = DateUtil.getCurrentTimeString() + "-"; //与时间戳组合后的最终文件名 String combinationFileName = timeString + fileName ; try { uploadFile(file.getBytes(), filePath, combinationFileName); }catch (Exception e){ return ServerResponse.createByErrorMessage("上传失败!"); } return ServerResponse.createBySuccess("上传成功!" , filePath + combinationFileName); } 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(); } public ServerResponse getFile(String url, HttpServletResponse response) throws Exception{ response.setCharacterEncoding("utf-8"); try{ FileInputStream fis = null; File file = new File(url); fis = new FileInputStream(file); byte[] b = new byte[fis.available()]; fis.read(b); OutputStream out = response.getOutputStream(); out.write(b); out.flush(); } catch (Exception e){ return ServerResponse.createByErrorMessage("查看文件失败!"); } return ServerResponse.createBySuccessMessage("上传成功!"); } public ServerResponse downloadFile(String url, HttpServletResponse response) throws Exception{ String fileName = url.substring(url.lastIndexOf("/")+1) ; response.setCharacterEncoding("utf-8"); response.setHeader("Content-Type","application/octet-stream"); response.setHeader("Content-Disposition","attachment;filename="+fileName); try{ FileInputStream fis = null; File file = new File(url); fis = new FileInputStream(file); byte[] b = new byte[fis.available()]; fis.read(b); OutputStream out = response.getOutputStream(); out.write(b); out.flush(); } catch (Exception e){ return ServerResponse.createByErrorMessage("查看文件失败!"); } return ServerResponse.createBySuccessMessage("上传成功!"); } }