之前弄了前端的图片上传与下载,但是做后端的时候还是需要放在后端来处理比较好,话不多说直接上代码
上传
这里的R.success是我自定义的返回类型的方式,只需要返回给前端文件名就行
static String originalFilename; static String basePath; @PostMapping("/upload") //只需要返回上传文件的名称 public R<String> upLoad(MultipartFile file){ log.info(file.toString()); originalFilename=""; basePath=""; originalFilename = file.getOriginalFilename(); //文件名 //UUid防止文件名的覆盖 String s = UUID.randomUUID().toString(); originalFilename=chageString(s); basePath="D:\\"+"imag\\"; //自定义存放路径 try { //文件的创建 File file1=new File(basePath); if(!file1.exists()){ //如果不存在该路径下的文件 file1.mkdirs(); } //文件的转存 file.transferTo(new File(basePath+originalFilename)); }catch (Exception e){ e.getMessage(); } return R.success(originalFilename); } public static String chageString(String s){ //处理图片名的前缀 String[] split = originalFilename.split("."); return s+"."+split[1];
下载
/** * 文件的下载--已输出流的方式进行下载 * 可以通过response获得输出流的方式 * @Param name--为上传函数中返回到前端的 /*文件名称*/ */ @GetMapping("/download/{name}") public void downLoad (@PathVariable("name") String name, HttpServletResponse response) throws IOException{ //输入流--换为流的方式来读取文件的内容,从磁盘输入到内存中;从文件系统中的文件获取输入字节。 FileInputStream fileInputStream=new FileInputStream(basePath+name); //输出流--文件从内存输出到磁盘中,将文件写回浏览器,并实现展示 ServletOutputStream outputStream = response.getOutputStream();//获取输出流的方式 byte[] bytes=new byte[1024]; int len=0; response.setContentType("image/jpeg");///设置一下输出的数据类型,我这里设置的是jpeg while ((len=fileInputStream.read(bytes))!=-1){ outputStream.write(bytes,0,len+1); outputStream.flush(); } outputStream.close(); fileInputStream.close(); }
在做该功能的时候,无论的是前端实现还是后端实现,应该是要根据自己项目的情况来定,当然我们得首先要学会这两种的实现方式。
目前还在学习阶段,有什么问题可以提出,一起学习!