【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服务器,然后使用公司的工具完成了一个文档管理系统:但是还是没有找到自己想要的文件上传与下载的方式. 今天看到一 ...
随机推荐
- 终于搞懂了!原来vue3中template使用ref无需.value是因为这个
前言 众所周知,vue3的template中使用ref变量无需使用.value.还可以在事件处理器中进行赋值操作时,无需使用.value就可以直接修改ref变量的值,比如:<button @cl ...
- css作用 文本属性 颜色属性
Css作用:美化页面 各种css属性 接触的 css属性 width: height: background: Color 选择符和声明 声明包括 属性:属性值 选择符:{ 属性:属性值 } 1:文本 ...
- Linux扩展篇-shell编程(八)-shell字符串截取
shell字符串截取,一般包含从指定位置和从指定字符截取. 一.从指定位置截取 1) 从字符串左边开始计数 格式: ${string: start :length} 从 string 字符串的左边第 ...
- 夜莺官方文档优化第一弹:手把手教你部署和架构讲解,消灭所有部署失败的 case!干!
前置说明 各种环境的选型建议 Docker compose 方式:仅仅用于简单测试,不推荐在生产环境使用 Docker compose,升级起来挺麻烦的,除非你对 Docker compose 真的很 ...
- 1004 成绩排名 PAT Basic Level
我的个人博客地址 azoux's blog 读入 n(>0)名学生的姓名.学号.成绩,分别输出成绩最高和成绩最低学生的姓名和学号. 输入格式: 每个测试输入包含 1 个测试用例,格式为 第 1 ...
- java中判断一个String字符串或字符数组中包含某个字段
/** * 判断String字符串中包含某个字段 * @param oriStr 原始字符串 * @return */ private static boolean findString(String ...
- 如何将本地的项目,上传到github
操作步骤: 1.github,创建一个仓库,复制仓库的地址 2.在要上传文件的目录,点击选择git bash here 3.输入[git clone],粘贴刚复制的仓库地址,clone成功后,会将仓库 ...
- EEPROM、Flash有关知识
存储器分为两大类:RAM(Random Access Memory,任意地址访问储存器)和ROM(Read-Only Memory,只读储存器). 发展历史 ROM Read-Only Memory, ...
- ZYNQ:使用 PetaLinux 构建Linux项目
参考文档:ug1144-petalinux-tools-reference-guide.pdf 环境安装 tofrodos iproute2 gawk gcc g++ git make net-too ...
- windows10 iis 环境下部署 asp.net core 应用程序的步骤
1.运行powershell,在运行窗口中输入:powershell,点回车,如下图: 2.安装choco,在打开的powershell窗口中输入:Set-ExecutionPolicy Bypass ...