栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringBoot上传下载文件

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot上传下载文件

SpringBoot上传下载文件

**前言:**首先这只是一个简单的本地上传和下载文件,项目中上传和下载文件更为复杂。但是对于上传和下载的步骤,以及涉及到文件流的传输大致都是一样的;既然是文件的传输,肯定是要弄明白IO流的(字符流,字节流,输入输出流…)推荐一篇非常详解的IO流的介绍:

https://blog.csdn.net/mu_wind/article/details/108674284

文件上传

1.前端通过post请求,请求头的content-type为multipart/form-data,将文件发送到后台;

2.后台使用MultipartFile类型的file作为参数来接受文件;

这是MultipatyFile类的所有方法,它继承了InputStreamSource;

通过file.getOriginalFilename()获取到文件名+文件类型,

通过file.getInputStream()获取到文件的输入流,

通过file.transferTo(Path)将文件上传到指定位置;

这样一看,好像对于文件的上传,通过调用MultipartFile类几个方法就可以完成了;

@PostMapping("/upload")
    public HashMap fileUpload(MultipartFile file, HttpServletRequest request){
        HashMap result = new HashMap<>();
            if (file.isEmpty()){
                System.out.println("文件为空...");
            }
            String originalFilename = file.getOriginalFilename();
            log.info("文件名:----> "+originalFilename);
            String fileType = originalFilename.substring(originalFilename.lastIndexOf("."));
            log.info("文件类型:----> "+fileType);
            String format = new SimpleDateFormat("/yyyy/MM/dd/").format(new Date());
            //上传到的路径
            String realPath = "D://data//"+format;
            File folder = new File(realPath);
            log.info("文件的上传路径:----> "+folder);
            if (!folder.exists()) {
                folder.mkdirs();
            }
            String newName = UUID.randomUUID() + fileType;
      		//通过一个路径和文件名创建一个新文件实例,将文件上传到新文件的位置
      		File newFile = new File(folder,newName);
            try {
                file.transferTo(newFile);
                result.put("status","success!!!");
                log.info("文件上传成功 ---> success");
            } catch (IOException e) {
                e.printStackTrace();
                result.put("status","error!!!");
                result.put("msg",e.getMessage());
                log.info("文件上传失败 ---> "+e.getMessage());
            }
        return result;
    }

其实除了通过file.tansferTo()方法上传文件,我们还可以自己将文件转为输出流写到指定的位置;也就是将

file.transferTo(newFile);

替换成

OutputStream out = new FileOutputStream(newFile);
out.write(bytes);
文件下载

对于简单的通过发送请求去下载指定文件过程,我们只需要将要下载的文件转换成流封装到响应体中即可。

@GetMapping("/download")
    public ResponseEntity download() throws IOException {
        FileSystemResource file = new FileSystemResource("D:\data\2021\11\15\fb76855f-e5c7-47b9-82c5-8ad3b94f663e.md");
        HttpHeaders headers = new HttpHeaders();
        String fileName = file.getFilename();
        log.info("下载的文件名:"+fileName);
        headers.add("Content-Disposition","attachment;filename="+fileName);
        return ResponseEntity.ok()
                .headers(headers)
                .contentLength(file.contentLength())
                .contentType(MediaType.parseMediaType("application/octet-stream"))
                .body(file);
    }

这里的文件下载,主要就是要了解对象http响应头和响应体的一个封装,还有对于Resource实现类的理解。

后端主要代码就这些啦,还有就是我们可以在配置文件中指定文件的大小等

总结

上传下载文件的步骤流程很少,最重要的是学好IO流,还有就是multipartFile类和http响应体的封装;

强烈建议抽出时间看一下上面推荐IO流的介绍;(也是说给我自己听的…)

下一篇:暂时先准备springboot自动配置原理,这个有点难搞,先慢慢看,再不断补充;因为感觉很多springboot东西又整不明白了

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/531459.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号