当前位置:   article > 正文

【Javaweb】【瑞吉外卖】上传下载实现

【Javaweb】【瑞吉外卖】上传下载实现

上传文件

原理:前端让用户选择一个文件,点击丢给后端上传,后端servlet接收到这些请求就进行应答构建连接,完了就开始接收。
但实现这些原理可以不是很懂。servlet封装了一下,spring boot也封装了一下。实现就比较简单。

实现过程:

  1. 确定下载的目标路径
  2. 转存就好了
    /**
     * 输入这个类就是spring boot基于servlet进行封装,直接 写这个参数就可以接收
     * 但是这个参数名称file要与前端传入一致,否则应该要写别的注解
     * @param file
     * @return
     */
    @PostMapping("/upload")
    public R<String> upload(MultipartFile file){

        log.info(file.toString());

        // 看一下输入的basePath是否建了目录
        // 否则不会自己建目录会报错
        File dir = new File(basePath);

        if (!dir.exists()){
            dir.mkdir();
        }

        String originPathName = file.getOriginalFilename();

        // 由于如果按照源文件名字保存,可能会重名,所以使用UUID进行编码然后保存
        // 拼接一下拓展名,就好了
        String suffix = originPathName.substring(originPathName.lastIndexOf("."));
        String prefix = UUID.randomUUID().toString();

        String fileName = prefix + suffix;

        try {
            // 最后调用transfer就可以转存了
            file.transferTo(new File(basePath + fileName));
        } catch (IOException e) {
            e.printStackTrace();
        }

        return R.success(fileName);
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

下载文件

下载文件稍稍会复杂一些些,但其实也还好,就是用文件IO流就好了。
保存好的文件是保存在了服务端刚刚设置的文件夹下,拿着时候相对于服务端程序就是需要input一下,将upload的文件读入程序,然后再去找一个output输出就好了。

实现过程:

  1. 开启文件IO流将保存的文件读入程序。
  2. 从HTTP Response里面获得输出流,往里面写就好了。

    @GetMapping("/download")
    public void download(String name, HttpServletResponse response){

        FileInputStream fis = null;
        ServletOutputStream sos = null;
        try {
            fis = new FileInputStream(new File(basePath + name));

            sos = response.getOutputStream();

            int len = 0;
            byte[] bytes = new byte[1024];
            while ((len = fis.read(bytes) ) != -1){
                sos.write(bytes);
            }

            sos.flush();

        } catch (Exception e) {
            // e.printStackTrace();
        }  finally {
            try {
                fis.close();
                sos.close();
            } catch (Exception e) {
                // e.printStackTrace();
            }
        }


    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/245711
推荐阅读
相关标签
  

闽ICP备14008679号