SpringMVC中的文件上传下载
SpringMVC的文件上传操作:
需要导入fileupload包和io的包
<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>
配置文件上传解析器:
bean的名字是固定的:multipartResolver
使用Spring表达式 #{1024*1024}
详细案例
pom.xml文件中添加依赖:
<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>
pom.xml文件中添加插件:
<!--文件下载需要的nio,至少1.6版本的jdk才能使用,
而默认是1.5的,所以要加个这个,换个jdk版本-->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
springmvc.xml中配置上传文件的解析器
<!--上传文件的解析器-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="1048676"/>
</bean>
upload.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
<!--做文件上传,编码格式必须是multipart/form-data
(由于忘了这一点,一直500,切记切记),method是post,enctype是multipart/form-data)-->
<form action="${pageContext.request.contextPath}/myfile/upload" method="post" enctype="multipart/form-data">
<table cellpadding="5px" cellspacing="0px" border="1px">
<tr>
<td>用户名:</td>
<td>
<input type="text" name="username">
</td>
</tr>
<tr>
<td>头像:</td>
<td>
<input type="file" name="pic">
</td>
</tr>
<tr align="right">
<td colspan="2">
<input type="reset" value="重置">
<input type="submit" value="提交">
</td>
</tr>
</table>
<a href="${pageContext.request.contextPath}/myfile/download?name=1578216354136360wallpaper_dt.jpg">下载头像</a>
<%--这个名字,正常应该是查数据库得到的,必须要有,才能下载,认真理解--%>
</form>
</body>
</html>
Controller
package com.xiongluoluo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Date;
/**
* Created by Administrator on 2020/1/5 0005.
*/
@Controller
@RequestMapping("myfile")
public class MyFile {
/*SpringMVC:文件上传*/
@RequestMapping("upload")
public ModelAndView upload(String username, MultipartFile pic) throws Exception {
//文件的类型
System.out.println(pic.getContentType());
//请求参数的参数名
System.out.println(pic.getName());
//文件名
System.out.println(pic.getOriginalFilename());
//文件大小
System.out.println(pic.getSize());
System.out.println(username);
/*存在数据库中的文件不能重复,不然以后用的时候,查的不知道是哪个,
所以一般要有个标识,这里使用当前时间的毫秒数代替*/
String newName = new Date().getTime()+pic.getOriginalFilename();
String path = "F:/"+newName;
File file = new File(path);
pic.transferTo(file);
//---------------------------------上面的代码只是把图片上传到服务器硬盘上
//----还需要调用service方法 把 用户相关信息保存到数据库中
//需要把 newName 保存到数据库中的
return null ;
}
/*SpringMVC:文件下载*/
@RequestMapping("download")
public ModelAndView download(String name, HttpServletResponse response) throws Exception{
System.out.println(name);
response.setContentType("application/x-msdownload");
response.setHeader("Content-Disposition","attachment;filename="+"jijiking.jpg");
Files.copy(Paths.get("F:/"+name), response.getOutputStream());
/*这个位置要有这个名字的那张图片*/
return null;
}
}