package com.huaheng.mobile.download; import com.huaheng.framework.web.domain.AjaxResult; import com.huaheng.pc.config.sendMail.service.MailServiceImpl; import org.apache.commons.fileupload.util.Streams; import org.apache.commons.io.IOUtils; import org.apache.commons.lang.exception.ExceptionUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.*; @RestController @RequestMapping("/mobile/download") public class DownloadController { private final static String fileDir="files"; private final static String rootPath = System.getProperty("user.home")+File.separator+fileDir+File.separator; private final Logger logger = LoggerFactory.getLogger(DownloadController.class); @RequestMapping("/upload") public Object uploadFile(@RequestParam("file") MultipartFile[] multipartFiles, final HttpServletResponse response, final HttpServletRequest request){ File fileDir = new File(rootPath); if (!fileDir.exists() && !fileDir.isDirectory()) { fileDir.mkdirs(); } try { if (multipartFiles != null && multipartFiles.length > 0) { for(int i = 0;i<multipartFiles.length;i++){ try { //以原来的名称命名,覆盖掉旧的 String storagePath = rootPath+multipartFiles[i].getOriginalFilename(); logger.info("上传的文件:" + multipartFiles[i].getName() + "," + multipartFiles[i].getContentType() + "," + multipartFiles[i].getOriginalFilename() +",保存的路径为:" + storagePath); Streams.copy(multipartFiles[i].getInputStream(), new FileOutputStream(storagePath), true); //或者下面的 // Path path = Paths.get(storagePath); //Files.write(path,multipartFiles[i].getBytes()); } catch (IOException e) { logger.error(ExceptionUtils.getFullStackTrace(e)); } } } } catch (Exception e) { return AjaxResult.error(e.getMessage()); } return AjaxResult.success("上传成功!"); } @RequestMapping("/download") public Object downloadFile(@RequestParam String fileName, final HttpServletResponse response, final HttpServletRequest request){ OutputStream os = null; InputStream is= null; try { // 取得输出流 os = response.getOutputStream(); // 清空输出流 response.reset(); response.setContentType("application/x-download;charset=GBK"); response.setHeader("Content-Disposition", "attachment;filename="+ new String(fileName.getBytes("utf-8"), "iso-8859-1")); //读取流 File f = new File(rootPath+fileName); is = new FileInputStream(f); if (is == null) { logger.error("下载附件失败,请检查文件“" + fileName + "”是否存在"); return AjaxResult.error("下载附件失败,请检查文件“" + fileName + "”是否存在"); } //复制 IOUtils.copy(is, response.getOutputStream()); response.getOutputStream().flush(); } catch (IOException e) { return AjaxResult.error("下载附件失败,error:"+e.getMessage()); } //文件的关闭放在finally中 finally { try { if (is != null) { is.close(); } } catch (IOException e) { logger.error(ExceptionUtils.getFullStackTrace(e)); } try { if (os != null) { os.close(); } } catch (IOException e) { logger.error(ExceptionUtils.getFullStackTrace(e)); } } return null; } }