后端处理图片的上传和下载

之前弄了前端的图片上传与下载,但是做后端的时候还是需要放在后端来处理比较好,话不多说直接上代码

上传

这里的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();
    }

在做该功能的时候,无论的是前端实现还是后端实现,应该是要根据自己项目的情况来定,当然我们得首先要学会这两种的实现方式。
目前还在学习阶段,有什么问题可以提出,一起学习!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流光CN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值