基于Spring MVC的文件上传和下载功能的实现
配置文件中配置扫描包,以便创建各个类的bean对象
<context:component-scan base-package="com.neuedu.spring_mvc"></context:component-scan>
一、文件的上传
Spring MVC 上下文中默认没有为文件上传提供了直接的支持,因此默认情况下不能处理文件的上传工作
如果想使用 Spring 的文件上传功能,需现在上下文中配置 CommonsMultipartResovler:
1、加入jar包:
commons-fileupload-1.3.1.jar
commons-io-2.4.jar
Maven项目通过在pom.xml文件中配置jar包依赖
<dependency>
<groupId>commons-fileupload</groupId>
3 <artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
10 </dependency>
2、在SpringMVC配置文件中配置CommonsMultipartResovler
<!-- 配置CommonsMultipartResolver,必须配置id值为multipartResolver -->
<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请求,file类型,enctype="multipart/form-data"
<form action="${pageContext.request.contextPath}/upload" method="post" enctype="multipart/form-data">
文件:<input type="file" name="file"/>
描述:<input type="text" name="desc"/>
<input type="submit" value="上传"/>
</form>
4、上传的实现
@Controller
public class TestController {
@RequestMapping(value="/upload",method=RequestMethod.POST)
public String upload(@RequestParam(value="desc") String desc,
@RequestParam(value="file") CommonsMultipartFile file,HttpServletRequest request) throws IOException{
ServletContext context = request.getSession().getServletContext();
//获取真实路径,使用tomcat插件,默认路径为webapp下
String realPath = context.getRealPath("/upload"); //判断upload文件夹是否存在
File file1=new File(realPath);
if(!file1.exists()){
file1.mkdir();
} //文件名添加uuid,防止重复
String uuid=UUID.randomUUID().toString().replace("-", "");
String fileName=uuid+"_"+file.getOriginalFilename();
//获取输入流
InputStream in=file.getInputStream();
//获取输出流,指定输出路径及文件名
FileOutputStream out=new FileOutputStream(new File(realPath+"\\"+fileName));
IOUtils.copy(in, out);
out.close();
in.close();
return "success";
}
}
二、文件的下载
用ResponseEntity<byte[]> 返回值完成文件下载
@Controller
public class TestController {
@RequestMapping(value="/download")
public ResponseEntity<byte[]> download(HttpSession session) throws IOException{
byte[] body=null;
ServletContext context = session.getServletContext();
String fileName="d5b9b61dc7154f5c9df4c844348ef6df_fennu.jpg"; //获取文件路径
String filePath = context.getRealPath("/upload/"+fileName);
//读取文件内容
InputStream in=new FileInputStream(new File(filePath));
//创建文件字节数组,数组长度为文件的总大小
body=new byte[in.available()];
//将文件内容保存到字节数组中
in.read(body); //创建响应头信息的MultiValueMap
MultiValueMap<String, String> headers=new HttpHeaders();
//设置文件名重新编码,以gbk格式读取再编码为iso8859-1
fileName=new String(fileName.getBytes("gbk"), "iso8859-1");
//设置响应信息
headers.add("Content-Disposition", "attachment;filename="+fileName); HttpStatus statusCode=HttpStatus.OK;
ResponseEntity<byte[]> responseEntity=new ResponseEntity<byte[]>(body, headers, statusCode);
in.close();
return responseEntity;
}
}
基于Spring MVC的文件上传和下载功能的实现的更多相关文章
- Java Web 学习(8) —— Spring MVC 之文件上传与下载
Spring MVC 之文件上传与下载 上传文件 表单: <form action="upload" enctype="multipart/form-data&qu ...
- Spring MVC的文件上传和下载
简介: Spring MVC为文件上传提供了直接的支持,这种支持使用即插即用的MultipartResolver实现的.Spring MVC 使用Apache Commons FileUpload技术 ...
- 0062 Spring MVC的文件上传与下载--MultipartFile--ResponseEntity
文件上传功能在网页中见的太多了,比如上传照片作为头像.上传Excel文档导入数据等 先写个上传文件的html <!DOCTYPE html> <html> <head&g ...
- Spring MVC-学习笔记(5)spring MVC的文件上传、下载、拦截器
1.文件上传. spring MVC为文件上传提供了直接的支持,这种支持是即插即用的MultipartResolver(多部分解析器)实现的.spring MVC使用Apache Commo ...
- 使用Spring MVC实现文件上传与下载
前段时间做毕业设计的时候,想要完成一个上传文件的功能,后来,虽然在自己本地搭建了一个ftp服务器,然后使用公司的工具完成了一个文档管理系统:但是还是没有找到自己想要的文件上传与下载的方式. 今天看到一 ...
- Spring MVC实现文件上传
基础准备: Spring MVC为文件上传提供了直接支持,这种支持来自于MultipartResolver.Spring使用Jakarta Commons FileUpload技术实现了一个Multi ...
- Spring MVC的文件上传
1.文件上传 文件上传是项目开发中常用的功能.为了能上传文件,必须将表单的method设置为POST,并将enctype设置为multipart/form-data.只有在这种情况下,浏览器才会把用户 ...
- 【Spring学习笔记-MVC-13】Spring MVC之文件上传
作者:ssslinppp 1. 摘要 Spring MVC为文件上传提供了最直接的支持,这种支持是通过即插即用的MultipartResolve实现的.Spring使用Jakarta Co ...
- spring mvc ajaxfileupload文件上传返回json下载问题
问题:使用spring mvc ajaxfileupload 文件上传在ie8下会提示json下载问题 解决方案如下: 服务器代码: @RequestMapping(value = "/ad ...
随机推荐
- 「小程序JAVA实战」 小程序的事件(11)
转自:https://idig8.com/2018/08/09/xiaochengxu-chuji-11/ 我们以前在web开发的时候,web页面也有一些相关的事件,当然小程序要接触屏幕要进行一些点击 ...
- Mycat实战之日志分析
环境搭建参见之前发的一篇:http://www.cnblogs.com/chinesern/p/7667106.html 1修改log4j.xml 配置增加其他级别调试以及验证是否自动加载 cat / ...
- c# 通过dllimport 调用c 动态链接库
https://blog.csdn.net/zhunju0089/article/details/80906501 这篇文件很详细 讲述了如何创建c 动态链接库项目 有一些注意的地方 不做介绍 下面是 ...
- Redhat 下添加用户到docker用户组
1. 检查系统中是否存在docker用户组,如果没有则手动添加 # sudo cat /etc/group |grep docker # sudo grouped -g 999 docker # -g ...
- Java多线程-线程的调度(让步)
线程的让步含义就是使当前运行着线程让出CPU资源,但是扔给谁不知道,仅仅是让出,线程状态回到可运行状态. 线程的让步使用Thread.yield()方法,yield()为静态方法,功能是暂停当前正在执 ...
- DLL卸载
[DLL卸载] 1.扫描Module.通过CreateToohelp32Snapshot.Module32First.Module32Next来完成. 2.通过FreeLibrary来卸载.通过在ke ...
- linux上搭建图片服务器
之前写过一个搭建图片服务器的随笔:https://www.cnblogs.com/xujingyang/p/7163290.html ,现在回头看看,我去,感觉写的好乱,现在再整一个吧.o(╯□╰ ...
- Opennebula自定义VM 实现方法-Contextualizing Virtual Machines 2.2
from:http://archives.opennebula.org/documentation:archives:rel2.2:cong There are two contextualizati ...
- bootstrap实现菜单定位
<!DOCTYPE html><html lang="zh-cn"><head><meta charset="utf-8&quo ...
- Monkey压力测试Android常见的错误类型及黑白名单的使用方法
Android常见的错误类型有两种 1.ANR类型 1)在5秒内没有响应输入的事件(例如,按键按下,屏幕触摸) 2)BroadcastReceiver在10秒内没有执行完毕 2.Crash类型 1)异 ...