package com.hp.ym.controller; import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.StrUtil; import com.hp.ym.bean.FileVO; import com.hp.ym.bean.Result; import com.hp.ym.util.CustomException; import org.assertj.core.util.Lists; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.PropertySource; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.net.URLEncoder; import java.util.List; @RestController @RequestMapping("/files") @PropertySource("classpath:application.yml") public class FileController { @Value("${web.upload-path}") private String uploadPath; /*** * 单文件上传 */ @PostMapping("/upload") public Result<String> upload(MultipartFile file){ //获取文件原始名 String originalFilename=file.getOriginalFilename(); //获取文件后缀名 String suffix=originalFilename.substring(originalFilename.lastIndexOf(".")); System.out.println(suffix); System.out.println(uploadPath); String filePath="C:/uploads"; File file1=new File(filePath); if (!file1.exists()){ file1.mkdirs(); } String fileName=File.separator+System.currentTimeMillis()+suffix; System.out.println(uploadPath+fileName); try { file.transferTo(new File(filePath+fileName)); System.out.println(fileName+"--上传成功"); } catch (IOException e) { // e.printStackTrace(); throw new CustomException("505","上传失败!"); } return Result.success(fileName); } /*** * 多文件上传 */ @PostMapping("/upload/multiple") public Result<List<FileVO>> multipleUpload(HttpServletRequest request){ List<MultipartFile> files=((MultipartHttpServletRequest) request).getFiles("files"); String filePath="C:/upload"; List<FileVO> fileVOS= Lists.newArrayList(); for (MultipartFile file : files) { if (file.isEmpty()){ continue; } String originalFilename=file.getOriginalFilename(); String flag= System.currentTimeMillis()+""; String fileName= File.separator+flag+originalFilename.substring(originalFilename.lastIndexOf(".")); FileVO fileVO=new FileVO(); fileVO.setFlag(flag); fileVO.setFileName(fileName); fileVOS.add(fileVO); try { file.transferTo(new File(filePath+fileName)); System.out.println(fileName+"--上传成功"); } catch (IOException e) { System.out.println(fileName+"--文件上传失败"); } } return Result.success(fileVOS); } /*** * 获取文件 */ @GetMapping("/{flag}") public void avatarPath(@PathVariable String flag, HttpServletResponse response){ OutputStream os; String basePath = System.getProperty("user.dir")+"/src/main/resources/static/file/"; List<String> fileNames= FileUtil.listFileNames(basePath); String avatar=fileNames.stream().filter(name->name.contains(flag)).findAny().orElse(""); try { if (StrUtil.isNotEmpty(avatar)){ response.addHeader("Content-Disposition","attachment;filename="+ URLEncoder.encode("UTF-8")); response.setContentType("application/octet-stream"); byte[] bytes=FileUtil.readBytes(basePath+avatar); os=response.getOutputStream(); os.write(bytes); os.flush(); os.close(); } } catch (Exception e) { System.out.println("文件下载失败"); } } //将图片以二进制的形式输出,前端路径可为:(项目路径+方法+文件名) /** * 回显图片 * @param id * @param response * @return */ // @RequestMapping("/showImage") // @ResponseBody // public Result download(String id, HttpServletResponse response) { // try { // response.setContentType("image/jpeg/jpg/png/gif/bmp/tiff/svg"); // String path = "C:/javaworkspace/project/rbApi/image/" + id; // File file = new File(path);//括号里参数为文件图片路径 // if (file.exists()) { //如果文件存在 // InputStream in = new FileInputStream(path); //用该文件创建一个输入流 // OutputStream os = response.getOutputStream(); //创建输出流 // byte[] b = new byte[1024]; // while (in.read(b) != -1) { // os.write(b); // } // in.close(); // os.flush(); // os.close(); // } // return null; // } catch (Exception e) { // e.printStackTrace(); // return null;//Result.build("false",null ); // } // } }