一:任务

1.任务

  文件的上传

  文件的下载

二:文件的上传

1.新建一个对象

  FileInfo.java

 package com.cao.dto;

 public class FileInfo {
private String path;
public FileInfo(String path) {
this.path=path;
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
} }

2.新建控制器

 package com.cao.web.controller;

 import java.io.File;
import java.io.IOException;
import java.util.Date; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile; import com.cao.dto.FileInfo; @RestController
@RequestMapping("/file")
public class FileController {
@PostMapping
public FileInfo uploadFile(MultipartFile fileKey) throws Exception {
System.out.println("fileName: "+fileKey.getName());
System.out.println("OriginalFilename: "+fileKey.getOriginalFilename());
System.out.println("size: "+fileKey.getSize());
//将要存储在controller的目录下
String folder="E:\\workspace-sts-3.9.5.RELEASE\\it-security-demo\\src\\main\\java\\com\\cao\\web\\controller";
File localFile=new File(folder,new Date().getTime()+".txt");
fileKey.transferTo(localFile);
//写入流中,这个主要用于写入其他的地方,例如服务器等,这里不写了
//fileKey.getInputStream()
return new FileInfo(localFile.getAbsolutePath());
}
}

3.测试类

 /**
* 测试文件的上传
* @throws Exception
*/
@Test
public void whenUploadSuccess() throws Exception {
String result=mockMvc.perform(MockMvcRequestBuilders.fileUpload("/file")
.file(new MockMultipartFile("fileKey","test.txt","multipart/form-data","hello".getBytes("UTF-8"))))
.andExpect(MockMvcResultMatchers.status().isOk())
.andReturn().getResponse().getContentAsString();
System.out.println("result="+result);
}

4.控制台

  

  存储到的现象

  

三:文件的下载

1.添加io操作的包

           <dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
</dependency>

2.文件下载的程序

 package com.cao.web.controller;

 import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Date; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.apache.commons.io.IOUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile; import com.cao.dto.FileInfo; @RestController
@RequestMapping("/file")
public class FileController { String folder="E:\\workspace-sts-3.9.5.RELEASE\\it-security-demo\\src\\main\\java\\com\\cao\\web\\controller"; /**
* 文件的上传控制器
* @param fileKey
* @return
* @throws Exception
*/
@PostMapping
public FileInfo uploadFile(MultipartFile fileKey) throws Exception {
System.out.println("fileName: "+fileKey.getName());
System.out.println("OriginalFilename: "+fileKey.getOriginalFilename());
System.out.println("size: "+fileKey.getSize());
//将要存储在controller的目录下
File localFile=new File(folder,new Date().getTime()+".txt");
fileKey.transferTo(localFile);
//写入流中,这个主要用于写入其他的地方,例如服务器等,这里不写了
//fileKey.getInputStream()
return new FileInfo(localFile.getAbsolutePath());
} /**
* 文件的下载
*/
@GetMapping("/{id}")
public void downFile(@PathVariable String id, HttpServletRequest request,HttpServletResponse response) {
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");
IOUtils.copy(inputStream, outputStream);
outputStream.flush();
} catch (Exception e) {
// TODO: handle exception
}
} }

3.在浏览器上访问

  

009 spring boot中文件的上传与下载的更多相关文章

  1. iOS开发中文件的上传和下载功能的基本实现-备用

    感谢大神分享 这篇文章主要介绍了iOS开发中文件的上传和下载功能的基本实现,并且下载方面讲到了大文件的多线程断点下载,需要的朋友可以参考下 文件的上传 说明:文件上传使用的时POST请求,通常把要上传 ...

  2. JavaWeb中文件的上传和下载

    JavaWeb中文件的上传和下载 转自: JavaWeb学习总结(五十)——文件上传和下载 - 孤傲苍狼 - 博客园https://www.cnblogs.com/xdp-gacl/p/4200090 ...

  3. Spring MVC 实现文件的上传和下载

    前些天一位江苏经贸的学弟跟我留言问了我这样一个问题:“用什么技术来实现一般网页上文件的上传和下载?是框架还是Java中的IO流”.我回复他说:“使用Spring MVC框架可以做到这一点,因为Spri ...

  4. Java中文件的上传与下载

    文件的上传与下载主要用到两种方法: 1.方法一:commons-fileupload.jar  commons-io.jar apache的commons-fileupload实现文件上传,下载 [u ...

  5. Spring MVC 实现文件的上传和下载 (八)

    完整的项目案例: springmvc.zip 目录 SpringMVC 中,文件的上传,是通过 MultipartResolver 实现的. 所以,如果要实现文件的上传,只要在 spring-mvc. ...

  6. Struts中文件的上传与下载

    前面学到的用组件去上传 前台: 1.post表单提交 2.表单类型 multipart/form-data 3.intput type=file 后台: Apach提供的FileUpload组件 核心 ...

  7. docker容器中文件的上传与下载

    原文地址:传送门 1.上传文件 docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH [OPTIONS]:保持源目标中的链接,例: docker cp ...

  8. JSP中文件的上传于下载演示样例

    一.文件上传的原理     1.文件上传的前提:         a.form表单的method必须是post         b.form表单的enctype必须是multipart/form-da ...

  9. Struts2中文件的上传与下载

    文件上传 1.jsp页面 <s:form action="fileAction" namespace="/file" method="POST& ...

随机推荐

  1. 用puttygen工具把私钥id_rsa转换成公钥id_rsa.ppk

    1 前言 有时候需要ppk格式的公钥,可以用putty来处理 2 步骤 1. 产生密钥 可以参考Gitlab的SSH配置(linux和windows双版本) $ ssh-keygen -t rsa - ...

  2. 开通博客的第一天上传我的C#基础笔记。

    1.索引器  string arrStr = "sddfdfgfh";  索引器的目的就是为了方便而已,可以在该类型的对象后面直接写[]访问该对象里面的成员  Console.Wr ...

  3. 幂的运算:X的n次幂

    计算X的n次幂,有多种算法 例子:计算2的62次方. method 1 :time = 1527 纳秒. 常规思路,进行61次的乘法! private static long mi(long X, l ...

  4. swift 学习- 12 -- 方法

    // 方法 是与某些特定类型相关的函数.  类, 结构体,枚举 都可以定义实例方法, 实例方法为给类型的实例封装了具体的任务与功能.  类, 结构体, 枚举 也可以定义类型方法,  类型方法与类型本身 ...

  5. .NET Windows API库(Cjwdev.WindowsApi)版本2.2发布

    https://blog.cjwdev.co.uk/2011/06/12/net-windows-api-library-cjwdev-windowsapi-vesion-2-2-released/# ...

  6. Confluence 6 配置推荐更新邮件通知默认的初始化设置

    Confluence 为订阅者发送常规邮件报告,这个邮件报告中包含有用户具有查看权限的空间的最新的内容.这个被称为 推荐更新(Recommended Updates)通知. 如果你具有 Conflue ...

  7. Confluence 6 注册外部小工具

    你可以从外部站点中注册小工具(Gadget)(例如 Jira 应用),你注册成功的小工具将会在 宏浏览器中显示出来,使用你 Confluence 站点的用户可以使用 Gadget Macro 来调用它 ...

  8. ob_start用法详解

    用PHP的ob_start(); 一. 相关函数简介:1.Flush:刷新缓冲区的内容,输出.函数格式:flush()说明:这个函数经常使用,效率很高.2.ob_start :打开输出缓冲区函数格式: ...

  9. appium 手势

    1.2 appium玩转安卓手机 智能手机发展到今天,形成了一整套有关手势操作的操作习惯,如手指左右上下滑动,及双指缩放,还有手指的滑动解锁,摇晃手机等动作.那么我们怎么在python中利用appiu ...

  10. 微信小程序 如何获取用户code

    1.首先需要获取code 使用 wx.login({ success: function(res) { console.log(res);//这里的返回值里面便包含code }, fail: func ...