package com.itheima.reggie.controller; import com.itheima.reggie.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.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.util.UUID; /** * 文件上传与下载 */ @Slf4j @RestController @RequestMapping("/common") public class CommonController { @Value("${reggie.path}") private String basePath; /** * 文件上传(将文件上传到服务器中) * @param file * @return */ @PostMapping("/upload") public R<String> upload(MultipartFile file){ //log.info("文件上传"); //如果目录不存在则创建 File dir = new File(basePath); if(!dir.exists()){ dir.mkdirs(); } //获取传入文件名及后缀名 String originalFilename = file.getOriginalFilename(); //获取传入文件的后缀名 String suffix = null; if (originalFilename != null) { suffix = originalFilename.substring(originalFilename.lastIndexOf('.')); } //使用UUID工具类自动生成文件名 String fileName = UUID.randomUUID()+suffix; try { //将临时文件file运输到指定目录中 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 fis = new FileInputStream(new File(basePath + name)); //文件输出流输出文件内容 ServletOutputStream outputStream = response.getOutputStream(); //将文件内容回写到浏览器 int len=0; byte[] bytes = new byte[1024]; while ((len=fis.read(bytes))!=-1){ outputStream.write(bytes,0,len); outputStream.flush(); } //设置响应消息的返回类型 response.setContentType("image/jpeg"); //关闭资源 fis.close(); outputStream.flush(); } catch (IOException e) { throw new RuntimeException(e); } } }
02-26
07-03
1190
03-14
06-09
2678