(Spring)文件上传和下载

文件上传的时候,浏览器将图片以MultipartFile的形式传到服务器,服务器将保存完的图片名响应给浏览器。

文件下载的时候,浏览器收到图片名,再向服务器请求图片资源,服务器以流的形式在浏览器上显示。

所以在浏览器的视角里,上传完图片就能立刻看到效果。

 

步骤:

1:文件上传

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
/**
    * 文件上传
    * @param file
    * @return
    */
   @PostMapping("/upload")
   public R<String> upload(MultipartFile file){
       //file是个临时文件,需要转存到指定位置,否则本次请求完成后临时文件会删除
 
       // 原始文件名
       String originalFilename= file.getOriginalFilename();
       String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
 
       // 使用UUID重新生成文件名,防止文件名称重复造成文件覆盖
       String fileName = UUID.randomUUID().toString() + suffix;
 
       // 创建一个目录对象
       File dir = new File(basePath);
       // 判断当前目录是否存在
       if(!dir.exists()){
           // 目录不存在,需要创建
           dir.mkdirs();
       }
 
       try {
           //文件转存
           file.transferTo(new File(basePath + fileName));
       } catch (IOException e) {
           e.printStackTrace();
       }
       return R.success(fileName);
   }

  

2:文件下载

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
/**
     * 文件下载
     * @param name
     * @param response
     */
    @GetMapping("/download")
    public void dewnload(String name, HttpServletResponse response){
 
        try {
            //输入流,读取文件内容
            FileInputStream fileInputStream = new FileInputStream(new File(basePath + name));
 
            //输出流,通过输出流将文件写回浏览器,在浏览器展示图片
            ServletOutputStream outputStream = response.getOutputStream();
 
            response.setContentType("image/jpeg");
 
            int len = 0;
            byte[] bytes = new byte[1024];
            //使用bytes数组从输入流读取图片内容,然后再写入输出流
            while((len = fileInputStream.read(bytes)) != -1){
                outputStream.write(bytes,0,len);
                outputStream.flush();
            }
 
            // 关闭资源
            outputStream.close();
            fileInputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
 
 
    }

  

posted @   小超和你  阅读(49)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· DeepSeek “源神”启动!「GitHub 热点速览」
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
点击右上角即可分享
微信分享提示