本文实例为大家分享了spring mvc实现文件上传和下载的具体代码,供大家参考,具体内容如下
文件上传
1、导入主要依赖
1
2
3
4
5
6
7
8
9
10
11
12
|
<!--文件上传-->
<dependency>
<groupid>commons-fileupload</groupid>
<artifactid>commons-fileupload</artifactid>
<version> 1.3 . 3 </version>
</dependency>
<!--servlet-api导入高版本的-->
<dependency>
<groupid>javax.servlet</groupid>
<artifactid>javax.servlet-api</artifactid>
<version> 4.0 . 1 </version>
</dependency>
|
2、配置bean:multipartresolver(注:此bena的id必须为:multipartresolver , 否则上传文件会报400的错误!)
1
2
3
4
5
6
7
8
9
|
<!--文件上传配置-->
<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>
|
3、index.jsp
4、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
53
|
@restcontroller
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 来保存上传的文件
*/
@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" ;
}
}
|
文件下载
index.jsp
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
|
@requestmapping (value = "/download" )
public string downloads(httpservletresponse response, httpservletrequest request) throws exception {
//要下载的图片地址
string path = request.getservletcontext().getrealpath( "/upload" );
string filename = "基础语法.jpg" ;
//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/m0_46360532/article/details/115584248