前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring boot的文件上传

Spring boot的文件上传

作者头像
用户7386338
发布2020-05-29 16:21:51
7770
发布2020-05-29 16:21:51
举报
文章被收录于专栏:Java患者Java患者

前言

文件上传的功能,基本上在所有的企业级应用都会有,那么在一个前后端分离的架构中,文件上传的功能又是如何去实现的呢。一般前端采用的是单页面应用,不会发生刷新和表单的提交,大部分都是异步完成的,他提交文件的时候,只是提交一个文件的路径上来。

文件上传测试用例

代码语言:javascript
复制
  @Test
  public void whenUploadSuccess() throws Exception {
      String result = mockMvc.perform(fileUpload("/file")
              .file(new MockMultipartFile("file", "test.txt", "multipart/form-data", "hello upload".getBytes("UTF-8"))))
              .andExpect(status().isOk())
              .andReturn().getResponse().getContentAsString();
      System.out.println(result);
  }

MockMultipartFile对象用来构建我们的文件以及文件上传的参数,第一个参数指定上传时参数的name,第二个参数指定上传的文件名字,第三个参数指定enctype类型,第四个参数就是上传的文件。

下面是我们文件上传的Controller:

代码语言:javascript
复制
@RestController
@RequestMapping("/file")
public class FileController {

  // 放文件的路径
  private String folder = "E:\\WorkSpace\\security\\security-demo\\src\\main\\java\\com\\zhaohong\\web\\controller";

  @PostMapping
  public FileInfo upload(MultipartFile file) throws Exception {
    System.out.println(file.getName());
    System.out.println(file.getOriginalFilename());
    System.out.println(file.getSize());
    File localFile = new File(folder, new Date().getTime() + ".txt");
    // 把上传的文件写在本地
    file.transferTo(localFile);
        return new FileInfo(localFile.getAbsolutePath());
  }
 }

需要注意的是,以上是我们代码的方便,而在我们实际的开发中,通常把文件存在到云服务上面,如阿里云、青牛云。

文件下载测试用例

下面是根据文件id,下载文件的代码:

代码语言:javascript
复制
  @GetMapping("/{id}")
  public void download(@PathVariable String id, HttpServletRequest request, HttpServletResponse response) throws Exception {

    try (InputStream inputStream = new FileInputStream(new File(folder, id + ".txt"));
        OutputStream outputStream = response.getOutputStream();) {

      response.setContentType("application/x-download");
      response.addHeader("Content-Disposition", "attachment;filename=test.txt");
      // commons-io包下的
      // 包输入流写入输出流
      IOUtils.copy(inputStream, outputStream);
      outputStream.flush();
    } 
  }

上面代码中把流的声明写在try的括号里面,他会在代码运行结束,自动帮我们关闭流,这是jdk1.7的特性。

到目前前为止。我们的文件上传下载已经讲完了,各位小伙伴们别忘了点关注哦。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java患者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文件上传测试用例
  • 文件下载测试用例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档