Spring Boot文档阅读笔记-FileHandling解析及抓包分析

这篇博文将说明使用WEB服务上传和下载文件。

首先是文件上传:

使用MultipartFile作为请求参数,这个上传API使用Multi-Part表单的值:

代码如下:

    @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public String fileUpload(@RequestParam("file")MultipartFile file) throws IOException {

        File convertFile = new File("./" + file.getOriginalFilename());
        convertFile.createNewFile();
        FileOutputStream fout = new FileOutputStream(convertFile);
        fout.write(file.getBytes());
        fout.close();

        return "File is upload successfully";
    }

下面是文件下载:

使用InputStreamResource获取需要下载的文件,然后将http头设置为Content-Disposition,并且还需指定响应为流媒体。

完整代码如下:

    @GetMapping(value = "/download")
    public ResponseEntity<Object> download(@RequestParam("fileName") String fileName) throws FileNotFoundException {

        File file = new File(fileName);
        InputStreamResource inputStreamResource = new InputStreamResource(new FileInputStream(file));

        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.add("Content-Disposition", String.format("attachment; filename=\"%s\"", file.getName()));
        httpHeaders.add("Cache-Control", "no-cache, no-store, must-revalidate");
        httpHeaders.add("Pragma", "no-cache");
        httpHeaders.add("Expires", "0");

        ResponseEntity<Object> responseEntity = ResponseEntity.ok().headers(httpHeaders).
                contentLength(file.length()).
                contentType(MediaType.parseMediaType("application/txt")).body(inputStreamResource);

        return responseEntity;
    }

使用如下:

上传成功后,会在这个目录中存在文件:

项目打包下载地址:

https://github.com/fengfanchen/Java/tree/master/SpringBootFileHandling

 

下面来分析下这个过程:

使用Fiddler抓包如下:

上传文件

从中可以看到,content-type为multipart/formdata其中边界分隔符为后面那个。他传的其实是二进制。

content-Disposition为内容倾向,为表单数据,name为程序中需要提交的键,filename为文件名。

下面的行,就是文件内容了。

 

下面来看看下载:

输入URL会激活IDM的下载

Fiddler下载如下:

这里的返回为Content-Disposition:为attachment说明是附件以及filename="cff.pdf",很多浏览器就是根据这条来判断,是文件的。

如果没有这条,就不会激发浏览器的下载。

 

 

 

 

已标记关键词 清除标记
相关推荐
<p> <b><span style="font-size:14px;"></span><span style="font-size:14px;background-color:#FFE500;">【Java面试宝典】</span></b><br /> <span style="font-size:14px;">1、68讲视频课,500道大厂Java常见面试题+100个Java面试技巧与答题公式+10万字核心知识解析+授课老师1对1面试指导+无限次回放</span><br /> <span style="font-size:14px;">2、这门课程基于胡书敏老师8年Java面试经验,调研近百家互联网公司及面试官的问题打造而成,从筛选简历和面试官角度,给出能帮助候选人能面试成功的面试技巧。</span><br /> <span style="font-size:14px;">3、通过学习这门课程,你能系统掌握Java核心、数据库、Java框架、分布式组件、Java简历准备、面试实战技巧等面试必考知识点。</span><br /> <span style="font-size:14px;">4、知识点+项目经验案例,每一个都能做为面试的作品展现。</span><br /> <span style="font-size:14px;">5、本课程已经在线下的培训课程中经过实际检验,老师每次培训结束后,都能帮助同学们运用面试技巧,成功找到更好的工作。</span><br /> <br /> <span style="font-size:14px;background-color:#FFE500;"><b>【超人气讲师】</b></span><br /> <span style="font-size:14px;">胡书敏 | 10年大厂工作经验,8年Java面试官经验,5年线下Java职业培训经验,5年架构师经验</span><br /> <br /> <span style="font-size:14px;background-color:#FFE500;"><b>【报名须知】</b></span><br /> <span style="font-size:14px;">上课模式是什么?</span><br /> <span style="font-size:14px;">课程采取录播模式,课程永久有效,可无限次观看</span><br /> <span style="font-size:14px;">课件、课程案例代码完全开放给你,你可以根据所学知识,自行修改、优化</span><br /> <br /> <br /> <span style="font-size:14px;background-color:#FFE500;"><strong>如何开始学习?</strong></span><br /> <span style="font-size:14px;">PC端:报名成功后可以直接进入课程学习</span><br /> <span style="font-size:14px;">移动端:<span style="font-family:Helvetica;font-size:14px;background-color:#FFFFFF;">CSDN 学院APP(注意不是CSDN APP哦)</span></span> </p>
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页