上传下载要用到的jar包一般是这个三个
commons-fileupload-1.3.2.jar
commons-io-2.4.jar
spring-web-4.3.2.RELEASE.jar
说到要用Mvc完成下载 就不得不说一下MultipartFile 这个类
MultipartFile 这个类是springmvc专门上传文件的一个类
使用这个类 我们首先要配置xml
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="5000000"></property>
</bean>
maxUploadSize配置文件的最大单位,单位为字节
maxInMemorySize配置上传文件的缓存 ,单位为字节
resolveLazily属性启用是为了推迟文件解析,以便在UploadAction 中捕获文件大小异常
下面就是具体的方法
@RequestMapping(value="upload",method=RequestMethod.POST)
public String upload(MultipartFile myFile,HttpServletRequest request) {
这里我们可以自定义自己文件要放的地方
String path = "C:\\Users\\Administrator\\Desktop\\fileupload";
在myFile里面我们可以获取name
//获取文件名并使用UUID生成新文件名
String fileName = myFile.getOriginalFilename();
fileName .endWith("jpg")限定上传的文件类型
然后创建一个新文件 在你想存的盘中(这是创造一个文件里面没有内容)
File targetFile = new File(path,newFileName);
if(!targetFile.exists()) {
targetFile.mkdirs();
}
//将文件写入硬盘
try {
myFile.transferTo(targetFile);
如果是上传多个文件是MultipartFile【】 myFile
for(MultipartFile a myFile)增强for循环
下载
下面是下载
下载最重要的是获取要下载的文件名称
和地址
public ResponseEntity<byte[]> download(String filename,HttpServletRequest request)throws Exception {
//下载文件路径
//String path = request.getServletContext().getRealPath("upload");
String path ="C:\\Users\\Administrator\\Desktop\\fileupload";
File file = new File(path + "/" + filename);
//开始设置http请求头
HttpHeaders headers = new HttpHeaders();
//下载显示的文件名,解决中文名称乱码问题
String downloadFileName = new String(filename.getBytes("UTF-8"),"ISO-8859-1");
//通知浏览器以attachment(下载方式)打开文件。!!!!!这里才是下载的重要步骤
headers.setContentDispositionFormData("attachment", downloadFileName);
//设置mime:application/octet-stream : 二进制流数据(最常见的文件下载)。
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
return new ResponseEntity<byte[]>(
FileUtils.readFileToByteArray(file), //把一个文件转换成字节数组返回
headers, //http请求头
HttpStatus.OK //200
);
}
}