您的位置:首页 > 编程语言 > Java开发

SpringMVC文件上传和下载

2018-01-17 20:00 417 查看
1. 文件上传

SpringMVC通过MultipartResolver来实现文件上传,默认没有装配,使用MultipartResolver需要加上commons-fileupload这个jar包。

1.1 配置MultipartResolver

<!--配置上传文件控件-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"
p:defaultEncoding="UTF-8"//文件编码
p:maxUploadSize="5242880"//文件最大上传大小
p:uploadTempDir="file:/home/rookie/temp"/>//临时存储路径


1.2 编写Controller方法

@RequestMapping("/upload")
public @ResponseBody String upload(@RequestParam("file") MultipartFile file) throws IOException{
if(!file.isEmpty()){
file.transferTo(new File(this.getClass().getClassLoader().getResource("/").getPath()+file.getOriginalFilename()));//将文件从默认目录拷贝
return "success";
}else{
return "redirect:/welcome.jsp";
}
}


1.3 HTML页面编写

<form action="upload" enctype="multipart/form-data" method="post">//enctype和method必须
<input type="file" name="file"/><br/>
<input type="submit" value="upload"/><br/>
</form>


2. 文件下载

将文件发送资源发送到浏览器,需要完成以下几步:

对请求处理方法使用void返回类型,并在方法中添加HttpServletResponse参数。

将响应的内容类型设为文件的内容类型。Content-Type标题在某个实体的body中定义数据类型,并包含媒体类型和子类型标识符。如果不清楚内容类型,并且希望浏览器始终显示另存为对话框,则将他设为application/ectet-stream。

添加一个名为Content-Dispostion的Http响应标题,并赋值attachment;filename=fileName.

(1). 隐藏资源:可以将文件放在WEB-INF目录下,这样只有授权的用户才可以访问

(2).防止交叉引用:获取请求的referer属性,如果该属性值为空或者非预期值,则不将文件返回给浏览器。

Controller编写

@RequestMapping("/download")
public void download(@RequestHeader(value = "referer",defaultValue = "")String referer, HttpServletResponse response) throws IOException{
if("".equals(referer)) {//判断是否为盗链,浏览器直接输入地址无法下载
response.getWriter().write("Invalid Request");
return;
}
response.setContentType("application/javascript");
response.setCharacterEncoding("utf-8");
System.out.println(referer);
response.setHeader("Content-Disposition","attachment;filename=jquery.js");
FileInputStream inputStream=new FileInputStream(this.getClass().getClassLoader().getResource("../../js/jquery-3.2.1.min.js").getPath());//文件为web根目录/js/jquery-3.2.1.min.js
OutputStream outputStream=response.getOutputStream();
byte []bytes=new byte[1024];
while(inputStream.read(bytes)!=-1){
outputStream.write(bytes);
}
outputStream.flush();
outputStream.close();
inputStream.close();
}


总结:使用文件上传的步骤:配置依赖项(commons-fileupload),配置MultipartResolver,在Html页面的表单中注意添加method和enctype属性。文件下载步骤:设置文件头(Content-Disposition)、MIME类型和编码方式,将输入流写到HttpServletResponse的输出流中,最后注意刷新输出流,关闭流。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  springmvc 视图 excel pdf xml