前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringMVC教程3[文件上传下载及静态资源处理]

SpringMVC教程3[文件上传下载及静态资源处理]

作者头像
用户4919348
发布2019-04-02 11:45:32
4600
发布2019-04-02 11:45:32
举报
文章被收录于专栏:波波烤鸭

一、文件上传

1.引入相关jar包

在这里插入图片描述
在这里插入图片描述

maven坐标

代码语言:javascript
复制
 <!-- fileUpload 解析上传的文件用到的jar -->
<dependency>
	<groupId>commons-fileupload</groupId>
	<artifactId>commons-fileupload</artifactId>
	<version>1.3.1</version>
</dependency>
<dependency>
	<groupId>commons-io</groupId>
	<artifactId>commons-io</artifactId>
	<version>2.4</version>
</dependency>

2.页面表单信息

表单提交方式必须是post方式提交,enctype必须是multipart/form-data

代码语言:javascript
复制
<form action="upload" method="post" enctype="multipart/form-data">
	<table>
		<tr>
			<td>用户名</td>
			<td><input type="text" name="username"></td>
		</tr>
		<tr>
			<td>用户密码</td>
			<td><input type="password" name="password"></td>
		</tr>
		
		<tr>
			<td>用户图像</td>
			<td><input type="file" name="userface"></td>
		</tr>
		<tr>
			<td><input type="submit" value="注册"></td>
		</tr>
	</table>
</form>
在这里插入图片描述
在这里插入图片描述

3.Controller中接收数据

代码语言:javascript
复制
/**
 * 文件上传案例
 * @author dpb【波波烤鸭】
 *
 */
@Controller
public class UserController {

	/**
	 * 上传的数据通过MultipartFile对象接收
	 * @param username
	 * @param password
	 * @param userface
	 * @throws Exception
	 * @throws IOException
	 */
	@RequestMapping("/upload")
	@ResponseBody
	public void upload(String username,String password
			,MultipartFile userface) throws Exception, IOException{
		System.out.println(username+","+password);
		userface.transferTo(new File("c:/tools/","123.png"));
	}
	
}

4.配置文件中修改

代码语言:javascript
复制
	<bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver"
		id="multipartResolver" >
		<!-- 设置上传文件信息参数 -->
		<!-- 设置文件上传的最大尺寸 -->
		<property name="maxUploadSize">
			<value>5242880</value>
		</property>
	</bean>

注意: CommonsMultipartResolver这个Bean的id必须为multipartResolver, 原因:CommonsMultipartResolver Bean是在DispatcherServlet中加载的,而DispatcherServlet是通过名字来查找这个Bean的。而其他的,则是按照类型查找。

二、文件下载

1.方式一:基于ResponseEntity实现

代码语言:javascript
复制
@RequestMapping("/testHttpMessageDown")
public ResponseEntity<byte[]> download(HttpServletRequest request) throws IOException {
    // 需要下载的文件
	File file = new File("E://123.jpg");
    byte[] body = null;
    InputStream is = new FileInputStream(file);
    body = new byte[is.available()];
    is.read(body);
    HttpHeaders headers = new HttpHeaders();
    headers.add("Content-Disposition", "attchement;filename=" + file.getName());
    HttpStatus statusCode = HttpStatus.OK;
    ResponseEntity<byte[]> entity = new ResponseEntity<byte[]>(body, headers, statusCode);
    return entity;
}

方式二:通用下载实现

代码语言:javascript
复制
@RequestMapping("/exportExcel")
public void exportExcel(HttpServletRequest request,HttpServletResponse response) throws IOException{
	File file = new File("d://owned.xls");
	//设置响应头和客户端保存文件名
    response.setCharacterEncoding("utf-8");
    response.setContentType("multipart/form-data");
    response.setHeader("Content-Disposition", "attachment;fileName=" + file.getName());
    try {
        //打开本地文件流
        InputStream inputStream = new FileInputStream(file);
        //激活下载操作
        OutputStream os = response.getOutputStream();
        //循环写入输出流
        byte[] b = new byte[2048];
        int length;
        while ((length = inputStream.read(b)) > 0) {
            os.write(b, 0, length);
        }
        // 这里主要关闭。
        os.close();
        inputStream.close();
    } catch (Exception e){
        
        throw e;
    }
}

三、静态资源处理

在SpringMVC中,默认情况下,所有的静态资源都会被拦截(js,css。html,图片、视频、音频),对于静态资源,需要手动配置静态资源过滤。 解决这个问题的方式有两种:

3.1 在web.xml中配置default servlet

代码语言:javascript
复制
 <!-- 防止资源文件被spring MVC拦截 -->
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.jpg</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.js</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.css</url-pattern>
    </servlet-mapping>

3.2在配置文件中通过标签设置

代码语言:javascript
复制
 <!--  防止资源文件被spring MVC拦截--> 
     <mvc:resources mapping="/images/**" location="/images/" cache-period="31556926"/>  
     <mvc:resources mapping="/js/**" location="/js/" cache-period="31556926"/>  
     <mvc:resources mapping="/css/**" location="/css/" cache-period="31556926"/> 

例如,浏览器发送http://localhost:8080/static/img/01.png请求,该请求符合/static/img/*,此时,*代表01.png,那么springmvc会将01.png补充到对应的location后面,进而查找到文件。 这里需要注意: * 表示一层路径 ** 表示多层路径映射

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年01月16日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、文件上传
    • 1.引入相关jar包
      • 2.页面表单信息
        • 3.Controller中接收数据
          • 4.配置文件中修改
          • 二、文件下载
            • 1.方式一:基于ResponseEntity实现
              • 方式二:通用下载实现
              • 三、静态资源处理
                • 3.1 在web.xml中配置default servlet
                  • 3.2在配置文件中通过标签设置
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档