本文实例为大家分享了springMVC实现文件上传和下载的具体代码,供大家参考,具体内容如下
1准备工作
web.xml文件导入DispatcherServlet,CharacterEncodingFilter
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
< servlet >
< servlet-name >springmvc</ servlet-name >
< servlet-class >org.springframework.web.servlet.DispatcherServlet</ servlet-class >
< init-param >
< param-name >contextConfigLocation</ param-name >
< param-value >classpath:applicationContext.xml</ param-value >
</ init-param >
< load-on-startup >1</ load-on-startup >
</ servlet >
< servlet-mapping >
< servlet-name >springmvc</ servlet-name >
< url-pattern >/</ url-pattern >
</ servlet-mapping >
< filter >
< filter-name >encoding</ filter-name >
< filter-class >org.springframework.web.filter.CharacterEncodingFilter</ filter-class >
< init-param >
< param-name >encoding</ param-name >
< param-value >utf-8</ param-value >
</ init-param >
</ filter >
< filter-mapping >
< filter-name >encoding</ filter-name >
< url-pattern >/*</ url-pattern >
</ filter-mapping >
|
前端测试页面
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
< html >
< head >
< title >$Title$</ title >
</ head >
< body >
<%-- 必须将表单的method设置为POST--%>
<%-- 设置enctype属性为multipart/form-data,二进制传递数据--%>
< form action = "${pageContext.request.contextPath}/upload2" enctype = "multipart/form-data" method = "post" >
< input type = "file" name = "file" />
< input type = "submit" value = "upload" >
</ form >
< br />
< a href = "${pageContext.request.contextPath}/download" rel = "external nofollow" >点击下载</ a >
</ body >
</ html >
|
spring配置文件applicationContext.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
<? xml version = "1.0" encoding = "UTF8" ?>
< beans xmlns = "http://www.springframework.org/schema/beans"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xmlns:context = "http://www.springframework.org/schema/context"
xmlns:mvc = "http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 自动扫描指定的包,下面所有注解类交给IOC容器管理,根据自己的项目扫描包 -->
< context:component-scan base-package = "com.zky.controller" />
<!-- 注解驱动 -->
< mvc:annotation-driven >
< mvc:message-converters register-defaults = "true" >
< bean class = "org.springframework.http.converter.StringHttpMessageConverter" >
< constructor-arg value = "UTF-8" />
</ bean >
< bean class = "org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" >
< property name = "objectMapper" >
< bean class = "org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean" >
< property name = "failOnEmptyBeans" value = "false" />
</ bean >
</ property >
</ bean >
</ mvc:message-converters >
</ mvc:annotation-driven >
<!-- 静态资源过滤-->
< mvc:default-servlet-handler />
<!-- 视图解析器 -->
< bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver"
id = "internalResourceViewResolver" >
<!-- 前缀 -->
< property name = "prefix" value = "/WEB-INF/jsp/" />
<!-- 后缀 -->
< property name = "suffix" value = ".jsp" />
</ bean >
<!--文件上传配置-->
< bean id = "multipartResolver" class = "org.springframework.web.multipart.commons.CommonsMultipartResolver" >
<!-- 请求的编码格式,必须和jSP的pageEncoding属性一致,以便正确读取表单的内容,默认为ISO-8859-1 -->
< property name = "defaultEncoding" value = "utf-8" />
<!-- 上传文件大小上限,单位为字节(10485760=10M) -->
< property name = "maxUploadSize" value = "10485760" />
< property name = "maxInMemorySize" value = "40960" />
</ bean >
</ beans >
|
2.文件上传
controller
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
package com.zky.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
@Controller
public class FileController {
//@RequestParam("file") 将name=file控件得到的文件封装成CommonsMultipartFile 对象
//批量上传CommonsMultipartFile则为数组即可
@RequestMapping ( "/upload" )
public String fileUpload( @RequestParam ( "file" ) CommonsMultipartFile file , HttpServletRequest request) throws IOException {
//获取文件名 : file.getOriginalFilename();
String uploadFileName = file.getOriginalFilename();
//如果文件名为空,直接回到首页!
if ( "" .equals(uploadFileName)){
return "redirect:/index.jsp" ;
}
System.out.println( "上传文件名 : " +uploadFileName);
//上传路径保存设置
String path = request.getServletContext().getRealPath( "/upload" );
//如果路径不存在,创建一个
File realPath = new File(path);
if (!realPath.exists()){
realPath.mkdir();
}
System.out.println( "上传文件保存地址:" +realPath);
InputStream is = file.getInputStream(); //文件输入流
OutputStream os = new FileOutputStream( new File(realPath,uploadFileName)); //文件输出流
//读取写出
int len= 0 ;
byte [] buffer = new byte [ 1024 ];
while ((len=is.read(buffer))!=- 1 ){
os.write(buffer, 0 ,len);
os.flush();
}
os.close();
is.close();
return "redirect:/index.jsp" ;
}
}
|
采用file.Transto 来保存上传的文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
/*
* 采用file.Transto 来保存上传的文件
*/
@RequestMapping ( "/upload2" )
public String fileUpload2( @RequestParam ( "file" ) CommonsMultipartFile file, HttpServletRequest request) throws IOException {
//上传路径保存设置
String path = request.getServletContext().getRealPath( "/upload" );
File realPath = new File(path);
if (!realPath.exists()){
realPath.mkdir();
}
//上传文件地址
System.out.println( "上传文件保存地址:" +realPath);
//通过CommonsMultipartFile的方法直接写文件(注意这个时候)
file.transferTo( new File(realPath + "/" + file.getOriginalFilename()));
return "redirect:/index.jsp" ;
}
|
3.文件下载
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
@RequestMapping (value= "/download" )
public String downloads(HttpServletResponse response , HttpServletRequest request) throws Exception{
//要下载的图片地址,改为自己图片路径,我是下载在我的项目里面的
String path = request.getServletContext().getRealPath( "/upload" );
//文件名
String fileName = "新建文本文档.txt" ;
//1、设置response 响应头
response.reset(); //设置页面不缓存,清空buffer
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);
//2、 读取文件--输入流
InputStream input= new FileInputStream(file);
//3、 写出文件--输出流
OutputStream out = response.getOutputStream();
byte [] buff = new byte [ 1024 ];
int index= 0 ;
//4、执行 写出操作
while ((index= input.read(buff))!= - 1 ){
out.write(buff, 0 , index);
out.flush();
}
out.close();
input.close();
return null ;
}
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/qq_53578500/article/details/119484932