编写一个请求上传和下载的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 文件上传和下载的更多相关文章

  1. SpringMVC 实现文件上传与下载,并配置异常页面

    目录 上传文件的表单要求 Spring MVC实现上传文件 需要导入的jar包 配置MultipartResolver解析器 编写接收上传文件的控制器 Spring MVC实现文件下载 下载文件时的h ...

  2. 使用springMVC实现文件上传和下载之环境配置与上传

    最近的项目中用到了文件的上传和下载功能,任务分配给了其他的同时完成.如今项目结束告一段落,我觉着这个功能比较重要,因此特意把它提取出来自己进行了尝试. 一. 基础配置: maven导包及配置pom.x ...

  3. springMvc之文件上传与下载

    我们经常会使用的一个功能是文件下载,既然有文件下载就会有文件上传,下面我们来看一下文件上传是如何实现的 首先准备好一个页面 <style type="text/css"> ...

  4. springmvc之文件上传、下载

    1.接收到的是图片的流时 //上传头像 @RequestMapping(value = "/uploadHeadSculpture", method = RequestMethod ...

  5. SpringMVC的文件上传与下载

    1. 单文件上传 配置jsp页面 <%@ page contentType="text/html;charset=UTF-8" language="java&quo ...

  6. 使用SpringMVC实现文件上传和下载

    文件上传 第一步,加入jar包: commons-fileupload-1.3.1.jar commons-io-2.4.jar 第二步,在SpringMVC配置文件中配置CommonsMultipa ...

  7. 【SpringMVC】文件上传与下载、拦截器、异常处理器

    文件下载 使用ResponseEntity实现下载文件的功能 index.html <!DOCTYPE html> <html lang="en" xmlns:t ...

  8. 使用springMVC实现文件上传和下载之文件下载

    接上一篇,文件下载需要获取下载文件的存储路径,这里只是手动填入,如果是在具体项目中,可以把文件名和上传后的存储路径保存在数据库中.然后增加一个文件列表的页面展示文件名和文件路径,然后点击下载的时候把相 ...

  9. 文件上传和下载(可批量上传)——Spring(二)

    针对SpringMVC的文件上传和下载.下载用之前“文件上传和下载——基础(一)”的依然可以,但是上传功能要修改,这是因为springMVC 都为我们封装好成自己的文件对象了,转换的过程就在我们所配置 ...

  10. 使用Spring MVC实现文件上传与下载

    前段时间做毕业设计的时候,想要完成一个上传文件的功能,后来,虽然在自己本地搭建了一个ftp服务器,然后使用公司的工具完成了一个文档管理系统:但是还是没有找到自己想要的文件上传与下载的方式. 今天看到一 ...

随机推荐

  1. 终于搞懂了!原来vue3中template使用ref无需.value是因为这个

    前言 众所周知,vue3的template中使用ref变量无需使用.value.还可以在事件处理器中进行赋值操作时,无需使用.value就可以直接修改ref变量的值,比如:<button @cl ...

  2. css作用 文本属性 颜色属性

    Css作用:美化页面 各种css属性 接触的 css属性 width: height: background: Color 选择符和声明 声明包括 属性:属性值 选择符:{ 属性:属性值 } 1:文本 ...

  3. Linux扩展篇-shell编程(八)-shell字符串截取

    shell字符串截取,一般包含从指定位置和从指定字符截取. 一.从指定位置截取 1) 从字符串左边开始计数 格式: ${string: start :length} 从 string 字符串的左边第 ...

  4. 夜莺官方文档优化第一弹:手把手教你部署和架构讲解,消灭所有部署失败的 case!干!

    前置说明 各种环境的选型建议 Docker compose 方式:仅仅用于简单测试,不推荐在生产环境使用 Docker compose,升级起来挺麻烦的,除非你对 Docker compose 真的很 ...

  5. 1004 成绩排名 PAT Basic Level

    我的个人博客地址 azoux's blog 读入 n(>0)名学生的姓名.学号.成绩,分别输出成绩最高和成绩最低学生的姓名和学号. 输入格式: 每个测试输入包含 1 个测试用例,格式为 第 1 ...

  6. java中判断一个String字符串或字符数组中包含某个字段

    /** * 判断String字符串中包含某个字段 * @param oriStr 原始字符串 * @return */ private static boolean findString(String ...

  7. 如何将本地的项目,上传到github

    操作步骤: 1.github,创建一个仓库,复制仓库的地址 2.在要上传文件的目录,点击选择git bash here 3.输入[git clone],粘贴刚复制的仓库地址,clone成功后,会将仓库 ...

  8. EEPROM、Flash有关知识

    存储器分为两大类:RAM(Random Access Memory,任意地址访问储存器)和ROM(Read-Only Memory,只读储存器). 发展历史 ROM Read-Only Memory, ...

  9. ZYNQ:使用 PetaLinux 构建Linux项目

    参考文档:ug1144-petalinux-tools-reference-guide.pdf 环境安装 tofrodos iproute2 gawk gcc g++ git make net-too ...

  10. windows10 iis 环境下部署 asp.net core 应用程序的步骤

    1.运行powershell,在运行窗口中输入:powershell,点回车,如下图: 2.安装choco,在打开的powershell窗口中输入:Set-ExecutionPolicy Bypass ...