微信公众号:Java患者

专注Java领域技术分享

前言

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

文件上传测试用例

  @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:

@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,下载文件的代码:

  @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的特性。

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

查看

文件和参数一起上传_Spring boot的文件上传相关推荐

  1. 【C++】42.使用YAML文件进行参数配置、读取与生成YAML文件

    关于配置文件的使用,除了本文的yaml的方法,经常使用的还有proto的方法,请参考我另一篇博客:proto相关用法:方法2.. c++中如果要使用YAML,需要安装yaml-cpp库,安装完成后使用 ...

  2. springboot @datetimeformat 标注在参数上无效_Spring Boot 中必须掌握的 45 个注解

    点关注,不迷路:持续更新Java架构相关技术及资讯热文!!! 一.SpringBoot/spring @SpringBootApplication: 包含@Configuration.@EnableA ...

  3. springboot传入json和文件_Spring Boot之 Controller 接收参数和返回数据总结(包括上传、下载文件)...

    server: port: 8088 servlet: context-path: /sid spring: mvc: view: prefix: / suffix: .html /** * 返回界面 ...

  4. .vue文件_Spring Boot 2.x(十六):玩转vue文件上传

    为什么使用Vue-Simple-Uploader 最近用到了Vue + Spring Boot来完成文件上传的操作,踩了一些坑,对比了一些Vue的组件,发现了一个很好用的组件--Vue-Simple- ...

  5. .vue文件_Spring Boot + Vue 前后端分离,两种文件上传方式总结!

    在Vue.js 中,如果网络请求使用 axios ,并且使用了 ElementUI 库,那么一般来说,文件上传有两种不同的实现方案: 通过 Ajax 实现文件上传 通过 ElementUI 里边的 U ...

  6. Spring boot上传文件(图片)到阿里云OSS(直接上传到应用服务器)

    Spring boot上传文件(图片)到阿里云OSS(直接上传到应用服务器) 主要思路 上传图片的思路有两种: 第一种是上传到应用服务器,再由应用服务器上传到OSS.这种适合上传的文件较小,较为简单, ...

  7. Spring Boot接收前端上传的多个文件

    Spring Boot接收前端上传的多个文件 突然被问到这个功能,太久没用到这个功能,印象有些模糊,这个文章记录一下. 前端那里会传一个字段和一些文件到后端,然后后端接收保存一下. 代码 可以直接使用 ...

  8. 解决使用Spring Boot、Multipartfile实现上传提示无法找到文件的问题

    解决使用Spring Boot.Multipartfile实现上传提示无法找到文件的问题 参考文章: (1)解决使用Spring Boot.Multipartfile实现上传提示无法找到文件的问题 ( ...

  9. Django之用户上传文件的参数配置

    Django之用户上传文件的参数配置 models.py文件 class Xxoo(models.Model):title = models.CharField(max_length=128)# me ...

最新文章

  1. C++ Exercises(十八)
  2. 数字货币 Electron Cash钱包 如何离线转账
  3. linux文件-link函数(文件硬链接和软连接)
  4. 【白话机器学习】算法理论+实战之支持向量机(SVM)
  5. java函数ao活动对象_JavaScript中的执行上下文和变量对象
  6. 《极乐迪斯科》:醉鬼神探的深邃人生
  7. 知名Node.js组件存在代码注入漏洞
  8. spicy命令_Spicy Spring:动态创建自己的BeanDefinition
  9. 第22天:如何使用OpenAI Gym和Universe构建AI游戏机器人
  10. [转]java中的io笔记
  11. 设计模式GOF23大纲
  12. octave存储文档
  13. 最常用20000英语单词表_家长最值得一看的文章如何培养孩子好的学习习惯!
  14. ai 自动外呼 微信加好友_制作一个可爱的Pwnagotchi AI好友来自动审核Wi-Fi网络
  15. html设置导航随滚动条滚动条,导航栏横向滚动条的两种实现方法
  16. 最左前缀原则最左匹配原则
  17. 手机端网页尺寸html,手机端网页设计尺寸_html/css_WEB-ITnose
  18. win 7 安装python 失败 提示Service Pack 1
  19. Chrome插件 Redux DevTools
  20. pycharm网站打不开的解决措施

热门文章

  1. C#基础—不完整类型(局部类型)
  2. Python3异常-AttributeError: module ‘sys‘ has no attribute ‘setdefaultencoding‘
  3. 为什么远程桌面不能复制?解决方法
  4. css overflow和border-radius一起用 解决圆角和滚动条一起用的问题
  5. ASP.NET一般处理程序新建一个方法里使用context.Response.Write的解决方法
  6. php解决高并发问题
  7. Jenkins安装maven integration plugin失败解决方法
  8. Pandas中map,applymap和apply方法之间的区别
  9. 为什么我的Button文本被迫在Lollipop上全部大写?
  10. 如何从我的Android应用程序发送电子邮件?