package com.controller; import com.annotation.IgnoreAuth; import com.util.ApiResponse; import org.springframework.util.ResourceUtils; 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.RestController; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.net.URLEncoder; import java.util.Date; /** * @ClassName CommonController * @Description 通用方法模块控制层 */ @RestController @RequestMapping("/common") public class CommonController { /** * 上传文件 */ @IgnoreAuth @RequestMapping("/uploadfile") public ApiResponse upload(@RequestParam("file") MultipartFile file, HttpServletRequest request) throws Exception { if (file.isEmpty()) { return ApiResponse.failed(400, "文件不能为空"); } String fileExt = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".") + 1); File path = new File(ResourceUtils.getURL("classpath:static").getPath()); if (!path.exists()) { path = new File(""); } File upload = new File(path.getAbsolutePath(), "/upload/"); if (!upload.exists()) { upload.mkdirs(); } String fileName = new Date().getTime() + "." + fileExt; File dest = new File(upload.getAbsolutePath() + "/" + fileName); file.transferTo(dest); return ApiResponse.success(fileName); } /** * 文件下载 * * @throws IOException */ @IgnoreAuth @RequestMapping(value = "/download", method = RequestMethod.GET) public void download(@RequestParam(value = "filename") String filename, HttpServletRequest request, HttpServletResponse response) throws IOException { //需要下载的文件 String path = ResourceUtils.getURL("classpath:static").getPath() + "/" + filename; //获取输入流 InputStream bis = new BufferedInputStream(new FileInputStream(new File(path))); //转码,免得文件名中文乱码 filename = URLEncoder.encode(filename, "UTF-8"); //设置文件下载头 response.addHeader("Content-Disposition", "attachment;filename=" + filename); //1.设置文件ContentType类型,这样设置,会自动判断下载文件类型 response.setContentType("multipart/form-data"); BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream()); int len = 0; while ((len = bis.read()) != -1) { out.write(len); out.flush(); } out.close(); } }