package cn.edu.hactcm.cotroller; import cn.edu.hactcm.common.R; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import javax.print.DocFlavor; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.UUID; @RestController @Slf4j @RequestMapping("/common") public class CommonController { @Value("${takeout.path}") private String basePath; /** * 文件上传 * @param file * @param request * @return */ @RequestMapping("/upload") public R upload(MultipartFile file, HttpServletRequest request){ //获取文件的格式后缀 String originalFilename = file.getOriginalFilename(); String suffix = originalFilename.substring(originalFilename.lastIndexOf(".")); //uuid String fileName = UUID.randomUUID().toString()+suffix; //如果路径不存在创建路径 File dir = new File(basePath); if (!dir.exists()) { dir.mkdir(); } //转存 try { file.transferTo(new File(basePath+fileName)); } catch (IOException e) { throw new RuntimeException(e); } //将文件名返回浏览器,后面用户新增信息时随表单数据提交到服务器,写入数据库 return R.success(fileName); } /** * 文件下载 * @param name * @param response */ @GetMapping("/download") public void download(String name, HttpServletResponse response){ try { //输入流,通过输入流读取文件内容 FileInputStream fileInputStream = new FileInputStream(new File(basePath + name)); //输出流,通过输出流将文件写回浏览器 ServletOutputStream outputStream = response.getOutputStream(); response.setContentType("image/jpeg"); int len = 0; byte[] bytes = new byte[1024]; while ((len = fileInputStream.read(bytes)) != -1){ outputStream.write(bytes,0,len); outputStream.flush(); } //关闭资源 outputStream.close(); fileInputStream.close(); } catch (Exception e) { e.printStackTrace(); } } }