一、SpringMVC实现文件的上传
Spring MVC 上下文中默认没有为文件上传提供了直接的支持,因 此默认情况下不能处理文件的上传工作,
如果想使用 Spring 的文件上传功能,需现在上下文中配置 CommonsMultipartResovler:
二、文件上传的步骤:
1.加入jar包:
commons-fileupload-1.3.1.jar
commons-io-2.4.jar
2.在SpringMVC配置文件中配置CommonsMultipartResovler
1
2
3
4
5
|
<!-- 配置文件上传 -->
<bean id=
"multipartResolver"
class
=
"org.springframework.web.multipart.commons.CommonsMultipartResolver"
>
<property name=
"defaultEncoding"
value=
"utf-8"
></property>
<property name=
"maxUploadSize"
value=
"1024000"
></property>
</bean>
|
3.前端表单:注意:需要请求方式:POST,input类型:file,(官网:www.fhadmin.org)属性:enctype="multipart/form-data"
1
2
3
4
5
|
<form action=
"${pageContext.request.contextPath }/testUpload"
method=
"post"
enctype=
"multipart/form-data"
>
file:<input type=
"file"
name=
"photo"
>
desc:<input type=
"text"
name=
"desc"
>
<input type=
"submit"
value=
"上传"
>
</form>
|
4.文件上传方法的实现
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
|
@RequestMapping
(
"/testUpload"
)
public
String testUpload(HttpServletRequest request,
@RequestParam
(value=
"desc"
,required=
false
)String desc,
@RequestParam
(
"photo"
) CommonsMultipartFile file){
ServletContext servletContext = request.getServletContext();
String realPath = servletContext.getRealPath(
"/upload"
);
File file1 =
new
File(realPath);
if
(!file1.exists()){
file1.mkdir();
}
OutputStream out =
null
;
InputStream in =
null
;
//uuid_name.jpg
String prefix = UUID.randomUUID().toString();
prefix = prefix.replace(
"-"
,
""
);
String fileName = prefix+
"_"
+file.getOriginalFilename();
System.out.println(fileName);
try
{
out =
new
FileOutputStream(
new
File(realPath+
"\\"
+fileName));
in = file.getInputStream();
//创建一个缓冲区(官网:www.fhadmin.org)
byte
buffer[]=
new
byte
[
1024
];
//判断输入流中的数据是否已经对完
int
len=
0
;
//循环将输入流读入到缓冲区中(len=in.read(buffer)>0)表示in里面还有数据
while
((len=in.read(buffer))!=-
1
){
//使用FileOutPutStream输出流,将缓冲区的数据输出到指定目录文件
out.write(buffer,
0
,len);
}
}
catch
(Exception e) {
e.printStackTrace();
}
//关闭输入流、输出流(官网:www.fhadmin.org)
try
{
out.close();
in.close();
}
catch
(IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return
"success"
;
}
|
三、文件的下载
文件能上传就能下载
1.用ResponseEntity<byte[]> 返回值完成文件下载:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
@RequestMapping
(value=
"/testDownLoad"
)
public
ResponseEntity<
byte
[]> testDonwLoad(HttpServletRequest request)
throws
Exception{
ServletContext servletContext=request.getServletContext();
String fileName=
"风吹麦浪.mp3"
;
String realPath = servletContext.getRealPath(
"/WEB-INF/"
+fileName);
InputStream in=
new
FileInputStream(
new
File(realPath));
byte
[] body=
new
byte
[in.available()];
in.read(body);
MultiValueMap<String, String> headers=
new
HttpHeaders();
fileName=
new
String(fileName.getBytes(
"gbk"
),
"iso8859-1"
);
headers.set(
"Content-Disposition"
,
"attachment;filename="
+fileName);
HttpStatus status=HttpStatus.OK;
ResponseEntity<
byte
[]> responseEntity=
new
ResponseEntity<>(body, headers,status);
in.close();
return
responseEntity;
}
|