一,文件上传

文件上传是项目开发中最常见的功能之一 ,springMVC 可以很好的支持文件上传,但是SpringMVC上下文中默认没有装配MultipartResolver,因此默认情况下其不能处理文件上传工作

如果想使用Spring的文件上传功能,则需要在上下文中配置MultipartResolver

第一步:文件配置及导包

对springmvc-servlet.xml进行文件配置

1 <!--文件上传配置-->
2 <bean id="multipartResolver"
3 class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
4 <property name="defaultEncoding" value="utf-8"/>
5 <!-- 上传文件大小上限,单位为字节(10485760=10M) -->
6 <property name="maxUploadSize" value="1048576"/>
7 <property name="maxInMemorySize" value="40960"/>
8 </bean>

第二步:前端 upload.jsp

为了能上传文件,必须将表单的method设置为post,并将enctype设置为multipart/form-data;只有在这样的情况下,浏览器才会把用户选择的文件以二进制数据发送给服务器

 1 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
2 <html>
3 <body>
4
5 <form action="${pageContext.request.contextPath}/upload1"
6 enctype="multipart/form-data" method="post">
7 <p> 上传 文件:<input type="file" name="file"/></p>
8 <p><input type="submit" value="上传"></p>
9 </form>
10
11 </body>
12 </html>

方式1:采用流的方式上传文件

@RequestParam(" file ") 将name = file控件得到的文件封装成CommonsMultipartFile对象;批量上传CommonsMultipartFile则为数组即可

CommonsMultipartFile的常用方法:

  • String getOriginalFilename():获取上传文件的原名
  • InputStream getInputStream():获取文件流
  • void transferTo(File dest):将上传文件保存到一个目录文件中

代码

 1 @Controller
2 public class ControllerUpload {
3
4 @RequestMapping("/upload1")
5 public String fileUpload(@RequestParam("file") CommonsMultipartFile file,
6 HttpServletRequest request) throws IOException {
7
8 //1.获取文件名字
9 String uploadName = file.getOriginalFilename();
10 //2.如果文件名为空则返回首页
11 if ("".equals(uploadName)) {
12 return "redirect:/index.jsp";
13 }
14 System.out.println("上传的文件名:" + uploadName);
15
16 //3.上传路径保存设置
17 String path = request.getServletContext().getRealPath("/WEB-INF/upload1");
18 //4.如果路径不存在就创建一个
19 File realPath = new File(path);
20 if (!realPath.exists()) {
21 realPath.mkdir();
22 }
23 System.out.println("保存的路径名:" + realPath);
24
25 //5.文件输入流
26 InputStream in = file.getInputStream();
27 //6.文件输入流
28 FileOutputStream out = new FileOutputStream(new File(realPath, uploadName));
29
30 //7.读取
31 int len = 0;
32 byte[] bytes = new byte[1024];
33 while ((len = in.read(bytes)) != -1) {
34 out.write(bytes, 0, len);
35 out.flush();
36 }
37 out.close();
38 in.close();
39
40 return "redirect:/success.jsp";
41 }
42 }

运行测试

保存的位置

方式2:采用file.Transto 来上传

 1 @Controller
2 public class ControllerUpload {
3
4 @RequestMapping("/upload2")
5 public String fileUpload2(@RequestParam("file") CommonsMultipartFile file,
6 HttpServletRequest request) throws IOException {
7
8 //上传路径保存设置
9 String path = request.getServletContext().getRealPath("/WEB-INF/upload2");
10 File realPath = new File(path);
11 if (!realPath.exists()) {
12 realPath.mkdir();
13 }
14
15 //上传文件地址
16 System.out.println("上传文件保存地址:" + realPath);
17
18 //通过CommonsMultipartFile的方法直接写文件(注意这个时候)
19 file.transferTo(new File(realPath + "/" + file.getOriginalFilename()));
20
21 return "redirect:/success.jsp";
22 }
23 }

【注意点:这里我们有两种方式显示上传成功的界面,第一种就是像我一样新建一个成功的success .jsp;

然后上传成功后让它重定向到成功界面。第二种就是运行JSON,在controller中加上@ResponseBody,并且return一句话,这样上传成功后就会直接显示出你return的话】

二,文件下载

第一步:前端 download.jsp

1 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
2 <html>
3 <body>
4
5 <a href="${pageContext.request.contextPath}/download">下载图片</a>
6
7 </body>
8 </html>

第二步:controller代码

  1. 设置 response 响应头
  2. 读取文件 -- InputStream
  3. 写出文件 -- OutputStream
  4. 执行操作
  5. 关闭流 (先开后关)

代码

 1 @Controller
2 public class ControllerDownload {
3
4 @RequestMapping("/download")
5 public String downloads(HttpServletResponse response) throws Exception{
6
7 //1.要下载的图片地址
8 String path="F:\\图片";
9 String fileName = "9.jpg";
10
11 //2.设置response 响应头
12 response.reset(); //设置页面不缓存,清空buffer
13 response.setCharacterEncoding("UTF-8"); //字符编码
14 response.setContentType("multipart/form-data"); //二进制传输数据
15 //3.设置响应头
16 response.setHeader("Content-Disposition",
17 "attachment;fileName="+ URLEncoder.encode(fileName, "UTF-8"));
18
19 File file = new File(path,fileName);
20 //4.读取文件--输入流
21 InputStream input=new FileInputStream(file);
22 //5.写出文件--输出流
23 OutputStream out = response.getOutputStream();
24
25 byte[] buff =new byte[1024];
26 int index=0;
27 //6.执行 写出操作
28 while((index= input.read(buff))!= -1){
29 out.write(buff, 0, index);
30 out.flush();
31 }
32 out.close();
33 input.close();
34 return null;
35 }
36 }

运行测试

SpringMVC(4):文件上传与下载的更多相关文章

  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. RF运行之后控制信息日志显示乱码(解决方法)

    RIDE运行自动化测试案例时,控制台信息显示乱码,如下所示: 解决方法:进入到python的安装路径下:D:\python37\Lib\site-packages\robotide\contrib\t ...

  2. ES6-正则新增(复习+学习)

    ES6-正则 昨天,复习了正则的基本知识,今天学习ES6新增的正则的知识,做一个总结笔记,大家可以先看4,5对应的方法然后再从头看,话不多说直接上: 1.RegExp构造函数的区别 2.新增的修饰符 ...

  3. 问题 N: 非洲小孩

    题目描述 家住非洲的小孩,都很黑.为什么呢? 第一,他们地处热带,太阳辐射严重. 第二,他们不经常洗澡.(常年缺水,怎么洗澡.) 现在,在一个非洲部落里,他们只有一个地方洗澡,并且,洗澡时间很短,瞬间 ...

  4. Python基础(@property)

    class Point(object): # def get_score(self): # return self.score # def set_score(self,value): # if no ...

  5. 菜鸡的Java笔记 第八 - java 面向对象

    面向对象的特点以及开发过程.    java中最大的特点是其支持面向对象编程设计思想.在面向对象之前广泛流传的是面向过程的编程思想,例如:C语言的开发就属于面向过程    如果要想更简单的去理解面向过 ...

  6. SpringMVC学习笔记---依赖配置和简单案例实现

    初识SpringMVC 实现步骤: 新建一个web项目 导入相关jar包 编写web.xml,注册DispatcherServlet 编写springmvc配置文件 接下来就是去创建对应的控制类 , ...

  7. linux结束进程命令

    在linux中,进程之间通过信号来通信.进程的信号就是预定义好一个消息,进程能识别它并决定忽略还是做出反应. 信号 名称 描述 1 HUP 挂起 2 INT 中断 3 QUIT 结束运行 9 KILL ...

  8. 提升 RTC 音频体验 - 从搞懂硬件开始

    前言 RTC(实时音视频通信)技术的快速发展,助力了直播.短视频等互动娱乐形式的普及:在全球疫情持续蔓延的态势下,云会议需求呈现爆发式增长,进一步推动了 RTC 行业的快速发展.为了给客户提供稳定可靠 ...

  9. 如何查看dpdk版本

    服务器上曾经装过很多版本的dpdk,此时如果编译某个程序出现奇怪错误的时候不由得会怀疑是不是dpdk版本的问题= = 令人吃惊的是,网上搜了一圈居然没有一个简单直接的方法能够直接使用,于是自己实验了一 ...

  10. 让HTML5游戏来的更猛烈些吧!--青岛思途

    作为著名的网页游戏门户,Kongregate在业界也算是鼎鼎大名了.小编与它的初识应是在几年前,只记得当时其平台上的游戏基本都是需要Flash的支持,可前几天,Adobe宣布计划停止Flash的更新和 ...