【SpringMVC】12 文件上传和下载
编写一个请求上传和下载的JSP页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h3>上传 和 下载</h3> <p style="color: red">${UploadMessage}</p> <form
action="${pageContext.request.contextPath}/upload"
enctype="multipart/form-data"
method="post"
> <p>上传的文件:<input type="file" name="UpFile"></p>
<p>上传:<input type="submit"></p>
</form> <p>下载的文件: <a href="${pageContext.request.contextPath}/download">文件资源</a></p>
</body>
</html>
导入上传工具依赖
Maven坐标
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
配置SpringMVC提供的文件上传工具类【还是依赖于上面的上传工具】
<!-- 文件上传配置 id="multipartResolver" 不能乱改 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 请求格式编码 和JSP的pageEncoding一致 统一UTF-8最好 -->
<property name="defaultEncoding" value="UTF-8" /> <!-- 文件上传大小 10M -->
<property name="maxUploadSize" value="10485760" />
<!-- 缓存? -->
<property name="maxInMemorySize" value="40960" />
</bean>
完整的文件控制器
package cn.dai.controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import org.springframework.web.servlet.ModelAndView; import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder; /**
* @author ArkD42
* @file SpringMVC
* @create 2020 - 05 - 07 - 20:07
*/
@Controller
public class FileController { @PostMapping("/upload")
public String getUploadFile(
@RequestParam("UpFile")CommonsMultipartFile file,
HttpServletRequest request
) throws IOException {
String fileName = file.getOriginalFilename(); if ("".equals(fileName)) {
request.setAttribute("UploadMessage","文件上传失败");
return "forward:/UploadAndDownload.jsp";
} System.out.println("正在检查文件,文件名称:" + fileName); String savePath = "C:\\Users\\Administrator\\Desktop\\"; System.out.println("保存路径:" + savePath); InputStream inputStream = file.getInputStream(); FileOutputStream fileOutputStream = new FileOutputStream(new File(savePath, fileName)); int len;
byte[] buffer = new byte[1024];
while ((len = inputStream.read(buffer))!= -1 ){
fileOutputStream.write(buffer,0,len);
fileOutputStream.flush();
} fileOutputStream.close();
inputStream.close(); request.setAttribute("UploadMessage","文件上传成功");
return "forward:/UploadAndDownload.jsp";
} @PostMapping("/upload2")
public String getUploadFile2(
@RequestParam("UpFile")CommonsMultipartFile file,
HttpServletRequest request
) throws IOException {
String savePath = "C:\\Users\\Administrator\\Desktop\\";
System.out.println("保存路径:" + savePath);
file.transferTo(new File(savePath + file.getOriginalFilename()));
request.setAttribute("UploadMessage","文件上传成功");
return "forward:/UploadAndDownload.jsp";
} @RequestMapping("/download")
public String download01(
HttpServletRequest request,
HttpServletResponse response
) throws Exception{
String path = "C:\\Users\\Administrator\\Pictures\\Saved Pictures\\";
String fileName = "21.jpg"; response.reset();
response.setCharacterEncoding("UTF-8");
response.setContentType("multipart/form-data");
response.setHeader("Content-Disposition","attachment;fileName=" + URLEncoder.encode(fileName,"utf-8"));
File file = new File(path + fileName); FileInputStream inputStream = new FileInputStream(file);
ServletOutputStream outputStream = response.getOutputStream(); byte[] buffer = new byte[1024];
int index = 0; while ((index = inputStream.read(buffer)) != -1){
outputStream.write(buffer,0,index); outputStream.flush();
}
outputStream.close();
inputStream.close();
return "forward:/UploadAndDownload.jsp";
} }

第一种上传方式:
- 获取表单的文件参数的值
- 获取文件名
- 设置存储路径
- 创建文件的输出流,文件实例的读取流
- 读取进内存,写入输出流,输出到路径位置
- 释放资源,转发回下载页面
@PostMapping("/upload")
public String getUploadFile(
@RequestParam("UpFile")CommonsMultipartFile file,
HttpServletRequest request
) throws IOException {
String fileName = file.getOriginalFilename();
System.out.println("正在检查文件,文件名称:" + fileName);
String savePath = "C:\\Users\\Administrator\\Desktop\\";
System.out.println("保存路径:" + savePath);
InputStream inputStream = file.getInputStream();
FileOutputStream fileOutputStream = new FileOutputStream(new File(savePath, fileName));
int len;
byte[] buffer = new byte[1024];
while ((len = inputStream.read(buffer))!= -1 ){
fileOutputStream.write(buffer,0,len);
fileOutputStream.flush();
}
fileOutputStream.close();
inputStream.close();
request.setAttribute("UploadMessage","文件上传成功");
return "forward:/UploadAndDownload.jsp";
}
第二种上传方式:
设置好文件名和路径,直接写进去完事了
@PostMapping("/upload2")
public String getUploadFile2(
@RequestParam("UpFile")CommonsMultipartFile file,
HttpServletRequest request
) throws IOException {
String savePath = "C:\\Users\\Administrator\\Desktop\\";
System.out.println("保存路径:" + savePath);
file.transferTo(new File(savePath + file.getOriginalFilename()));
request.setAttribute("UploadMessage","文件上传成功");
return "forward:/UploadAndDownload.jsp";
}
下载文件
- 找到被下载的文件,路径 + 名称
- 响应头设置
- 创建读取和输出流
- 读取目标文件,写入输出流
- 响应请求
@RequestMapping("/download")
public String download01(
HttpServletRequest request,
HttpServletResponse response
) throws Exception{
String path = "C:\\Users\\Administrator\\Pictures\\Saved Pictures\\";
String fileName = "21.jpg";
response.reset();
response.setCharacterEncoding("UTF-8");
response.setContentType("multipart/form-data");
response.setHeader("Content-Disposition","attachment;fileName=" + URLEncoder.encode(fileName,"utf-8"));
File file = new File(path + fileName);
FileInputStream inputStream = new FileInputStream(file);
ServletOutputStream outputStream = response.getOutputStream();
byte[] buffer = new byte[1024];
int index = 0;
while ((index = inputStream.read(buffer)) != -1){
outputStream.write(buffer,0,index);
outputStream.flush();
}
outputStream.close();
inputStream.close();
return "forward:/UploadAndDownload.jsp";
}
【SpringMVC】12 文件上传和下载的更多相关文章
- SpringMVC 实现文件上传与下载,并配置异常页面
目录 上传文件的表单要求 Spring MVC实现上传文件 需要导入的jar包 配置MultipartResolver解析器 编写接收上传文件的控制器 Spring MVC实现文件下载 下载文件时的h ...
- 使用springMVC实现文件上传和下载之环境配置与上传
最近的项目中用到了文件的上传和下载功能,任务分配给了其他的同时完成.如今项目结束告一段落,我觉着这个功能比较重要,因此特意把它提取出来自己进行了尝试. 一. 基础配置: maven导包及配置pom.x ...
- springMvc之文件上传与下载
我们经常会使用的一个功能是文件下载,既然有文件下载就会有文件上传,下面我们来看一下文件上传是如何实现的 首先准备好一个页面 <style type="text/css"> ...
- springmvc之文件上传、下载
1.接收到的是图片的流时 //上传头像 @RequestMapping(value = "/uploadHeadSculpture", method = RequestMethod ...
- SpringMVC的文件上传与下载
1. 单文件上传 配置jsp页面 <%@ page contentType="text/html;charset=UTF-8" language="java&quo ...
- 使用SpringMVC实现文件上传和下载
文件上传 第一步,加入jar包: commons-fileupload-1.3.1.jar commons-io-2.4.jar 第二步,在SpringMVC配置文件中配置CommonsMultipa ...
- 【SpringMVC】文件上传与下载、拦截器、异常处理器
文件下载 使用ResponseEntity实现下载文件的功能 index.html <!DOCTYPE html> <html lang="en" xmlns:t ...
- 使用springMVC实现文件上传和下载之文件下载
接上一篇,文件下载需要获取下载文件的存储路径,这里只是手动填入,如果是在具体项目中,可以把文件名和上传后的存储路径保存在数据库中.然后增加一个文件列表的页面展示文件名和文件路径,然后点击下载的时候把相 ...
- 文件上传和下载(可批量上传)——Spring(二)
针对SpringMVC的文件上传和下载.下载用之前“文件上传和下载——基础(一)”的依然可以,但是上传功能要修改,这是因为springMVC 都为我们封装好成自己的文件对象了,转换的过程就在我们所配置 ...
- 使用Spring MVC实现文件上传与下载
前段时间做毕业设计的时候,想要完成一个上传文件的功能,后来,虽然在自己本地搭建了一个ftp服务器,然后使用公司的工具完成了一个文档管理系统:但是还是没有找到自己想要的文件上传与下载的方式. 今天看到一 ...
随机推荐
- 简单实现Viper配置管理
本文由 ChatMoney团队出品 简介 前面实现的一个简易suno-api.是使用cookie来获取suno-token发起请求的.当时并没有通过配置的方式来获取cookie,而是直接在代码中写死了 ...
- 在线HMAC加密工具
在线HMAC加密工具提供一站式服务,支持MD5至SHA512.RIPEMD160及SM3等多种哈希算法,用户可便捷选择算法并生成安全的HMAC散列值,确保消息完整性与验证来源.适用于开发调试.网络安全 ...
- GIS数据获取:气象数据免费下载网站
本文对目前主要的气象数据获取网站加以整理与介绍. 本文为"GIS数据获取整理"专栏中第二篇独立博客,因此本文全部标题均由"2"开头.本文对目前主要的气象 ...
- [OC]一个括号新建一个类
[OC]一个括号新建一个类 特别说明 以下代码仅仅用于说明用途,命名也不是特别规范,小朋友不要模仿哦. 前言 在iOS开发中,我们会经常用到这么一段代码: UIView *myView = [UIVi ...
- JAVA-poi导出excel到http响应流
导出结果为excel是相对常见的业务需求,大部分情况下只需要导出简单的格式即可,所以有许多可以采用的方案.有些方案还是很容易实现的. 一.可用的解决方案 目前可以有几类解决方案: 字处理企业提供的解决 ...
- Kubernetes(七)数据存储
数据存储 容器的生命周期可能很短,会被频繁地创建和销毁.容器在销毁时,保存在容器中的数据也会被清除.这种结果对用户来说,在某些情况下是不乐意看到的.为了持久化保存容器的数据,kubernetes引入了 ...
- 基于 SQLite 3 的 C 学习:2-高级操作
基于 SQLite 3 的 C/C++ 学习:2-高级操作与有关函数 背景 基于 SQLite 3 的 C/C++ 学习:开发流程 与 基本函数 中,我们简单介绍了有关 SQLite3 函数的使用. ...
- 面试官:Java对象引用都有哪些类型?
哈喽,大家好,我是世杰. 本文我为大家介绍面试官经常考察的「Java对象引用相关内容」 照例在开头留一些面试考察内容~~ 面试连环call Java对象引用都有哪些类型? Java参数传递是值传递还是 ...
- P3938
斐波那契 题意描述 输入 5 1 1 2 3 5 7 7 13 4 12 输出 1 1 2 2 4 点拨 根据题目去找规律,每一个儿子与父亲结点具有斐波那契数的规律,我们只需要每次找到该数在斐波那契数 ...
- 微信小程序热门选题
一.大体实现思路 微信小程序,现在是非常热门的,基于微信生态开发的.现在很多计算机毕业的同学,都会选择微信小程序作为毕业设计 小程序端通常都是展示数据给用户去看的,大多数情况下,这些数据不是写死的,而 ...