009 spring boot中文件的上传与下载
一:任务
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中文件的上传与下载的更多相关文章
- iOS开发中文件的上传和下载功能的基本实现-备用
感谢大神分享 这篇文章主要介绍了iOS开发中文件的上传和下载功能的基本实现,并且下载方面讲到了大文件的多线程断点下载,需要的朋友可以参考下 文件的上传 说明:文件上传使用的时POST请求,通常把要上传 ...
- JavaWeb中文件的上传和下载
JavaWeb中文件的上传和下载 转自: JavaWeb学习总结(五十)——文件上传和下载 - 孤傲苍狼 - 博客园https://www.cnblogs.com/xdp-gacl/p/4200090 ...
- Spring MVC 实现文件的上传和下载
前些天一位江苏经贸的学弟跟我留言问了我这样一个问题:“用什么技术来实现一般网页上文件的上传和下载?是框架还是Java中的IO流”.我回复他说:“使用Spring MVC框架可以做到这一点,因为Spri ...
- Java中文件的上传与下载
文件的上传与下载主要用到两种方法: 1.方法一:commons-fileupload.jar commons-io.jar apache的commons-fileupload实现文件上传,下载 [u ...
- Spring MVC 实现文件的上传和下载 (八)
完整的项目案例: springmvc.zip 目录 SpringMVC 中,文件的上传,是通过 MultipartResolver 实现的. 所以,如果要实现文件的上传,只要在 spring-mvc. ...
- Struts中文件的上传与下载
前面学到的用组件去上传 前台: 1.post表单提交 2.表单类型 multipart/form-data 3.intput type=file 后台: Apach提供的FileUpload组件 核心 ...
- docker容器中文件的上传与下载
原文地址:传送门 1.上传文件 docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH [OPTIONS]:保持源目标中的链接,例: docker cp ...
- JSP中文件的上传于下载演示样例
一.文件上传的原理 1.文件上传的前提: a.form表单的method必须是post b.form表单的enctype必须是multipart/form-da ...
- Struts2中文件的上传与下载
文件上传 1.jsp页面 <s:form action="fileAction" namespace="/file" method="POST& ...
随机推荐
- 关于KEIL编译报错和警告问题
编译时候报错.. Library reports error: __use_no_semihosting was requested, but _ttywrch was referenced 上网找了 ...
- C# 中使用 Excel
using System;using System.Collections.Generic;using System.Text;using System.Reflection;using System ...
- mybatis 按in 函数参数顺序排序
使用 FIELD()函数 SELECT * FROM user WHERE id IN (72, 80, 69) ORDER BY FIELD(id, 72, 80, 69)
- Swift 学习- 02 -- 基础部分2
class NamedShape{ var numberOfSides: Int = 0 var name: String init(name: String) { self.name = name ...
- Modbus库开发笔记之八:CRC循环冗余校验的研究与实现
谈到Modbus通讯自然免不了循环冗余校验(CRC),特别是在标准的串行RTU链路上是必不可少的.不仅如此在其他开发中,也经常要用到CRC 算法对各种数据进行校验.这样一来,我们就需要研究一下这个循环 ...
- 【MySql】delete用法
delete 语句用于删除表中的数据, 基本用法为: delete from 表名称 where 删除条件; 以下是在表 students 中的实例: 删除 id 为 3 的行: delete fro ...
- Confluence 6 内存使用和需求和一些问题
系统备份和恢复 Confluence 的备份和恢复是与数据库中数据量的大小有关.这个操作可能会对 Confluence 的性能产生很多关键性的影响并且大量消耗内存.如果你在 Confluence 的 ...
- Confluence 6 从一个 XML 备份中导入一个空间
有下面 2 中方法可以导入一个空间——通过上传一个文件,或者从你 Confluence 服务器上的一个目录中导入.上传文件仅仅是针对一个小站点的情况.为了取得最好的导入结果,我们推荐你从服务器上的目录 ...
- Confluence 6 Oracle 驱动输入你的数据库细节
Confluence 的安装向导将会指导你一步一步的在 Confluence 中配置安装 Oracle 数据库. 使用 JDBC 连接(默认) JDBC 是推荐的连接你的 Confluence 到数据 ...
- UserNotifications ios10 通知使用
通知在ios10 中推荐使用 导入 import UserNotifications 头文件 if #available(iOS 10.0, *) { UNUserNotificationCent ...