springmvc文件上传与下载

Springmvc文件上传与下载(注解)

一、springmvc的文件上传:

*文件上传的inputtype="file"

必须指定form 表单的enctype="multipart/form-data"

 

1.首先在springmvc-servlet.xml中配置springmvc文件上传的解析器:

 

<!-- 配置springmvc文件上传的解析器 -->

<!-- 作用:将要上传文件的流中的数据读取到MultipartFile对象中-->

<bean

 id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

</bean>

 

【注意】:该解析器的id必须是multipartResolver,springmvc默认会按照这个id的值去找解析器。

 

2、在处理器中定义MultipartFile类型的参数接受页面传递过来的文件。

<1>如果是单文件上传,处理器方法中定义MultipartFile对象参数来接受,不需要加@RequestParam

<1>如果是多文件上传,处理器方法中定义MultipartFile对象数组参数来接受,需要加@RequestParam

 

// 上传
@RequestMapping("uploadt")
// 将文件上传到tomcat中项目的upload目录
// 单个文件上传
public String upload(@RequestParam MultipartFile uploadFile,HttpSession session){
// 一、创建目标文件的File对象
// 1、获取upload目录在web项目中的真实路径
String directory = session.getServletContext().getRealPath("/upload");
// 2、获取上传文件的文件名,这个名称作为目标文件的文件名称
String uploadFileName = uploadFile.getOriginalFilename();
//为了避免文件重名问题,要生成一个时间,保证目标文件的文件名是唯一的
String time = System.currentTimeMillis() + "";
String newFileName = uploadFileName.replace(".", time + ".");
// 3、将directory和uploadFileName拼接在一起形成目标文件的完整路径
String filePath = directory + "/" + newFileName;
// 4、创建目标文件的File对象
File targetFile = new File(filePath);
try {
// 二、将要上传的文件上传到目标文件
// MultipartFile中有个方法做上传,targetFile指定目标文件的File对象
uploadFile.transferTo(targetFile);
// 上传成功后,将上传的文件信息保存到数据库表
MyFile myFile = new MyFile(time, uploadFileName,session.getAttribute("uname").toString(),new Date());
fileDao.save(myFile);
} catch (Exception e) {
e.printStackTrace();
}
return "redirect:queryAll";
}

 

 

 

 

二、springmvc的文件下载

1、使用FileUtils.readFileToByteArray(要下载的文件File对象)读取要下载文件的数据到字节数组。
2、通过HttpHeaders指定下载文件的其他相关信息,如:下载的文件名,以什么方式下载:
hearders.setContentDispositionFormData("attachment", "下载的文件名");
hearders.setContentType(MediaType.APPLICATION_OCTET_STREAM);
3、创建ResponseEntity对象,springmvc使用ResponseEntity将数据发给浏览器。
// 1、第一个参数:指定要发送的数据
// 2、第二个参数:指定HttpHeaders
// 3、第三个参数:指定下载文件的状态,使用HttpStatus来表示
4、返回ResponseEntity对象,springmvc会根据ResponseEntity中的内容实现下载。

 

//文件下载
// 要返回ResponseEntity
@RequestMapping("download")
public ResponseEntity download(String fid,String fname,HttpSession session) throws Exception{
//    System.out.println("fid=" + fid);
fname = new String(fname.getBytes("ISO8859-1"),"UTF-8");
System.out.println("fname=" + fname);
// 一、找到要下载文件在web项目中的真实路径
String directory = session.getServletContext().getRealPath("/upload");
String fileName = fname.replace(".", fid + ".");
String downFilePath = directory + "/" + fileName;
//为要下载的文件创建File对象
File dowmFile = new File(downFilePath);
try {
// 读取要下载文件中的内容
// readFileToByteArrayt用来将File对象读成字节数组
// 到此为止,准备好了要下载的数据
byte[] barr = FileUtils.readFileToByteArray(dowmFile);
// 二、指定下载文件的其他相关数据(如:下载文件的文件名称....)
// 这些信息在springmvc中封装成了HttpHeaders对象
HttpHeaders hearders = new HttpHeaders();
//1、指定下载文件的文件名称
// setContentDispositionFormData("下载形式,attachment表示以附件形式")
hearders.setContentDispositionFormData("attachment", new String(fname.getBytes("UTF-8"),"ISO8859-1"));
//2、指定以二进制流的方式将字节数组发送给浏览器
hearders.setContentType(MediaType.APPLICATION_OCTET_STREAM);

//三、将数据发给浏览器
// springmvc是使用ResponseEntity将数据发给浏览器的
// 1、第一个参数:指定要发送的数据
// 2、第二个参数:指定HttpHeaders
// 3、第三个参数:指定下载文件的状态,使用HttpStatus来表示
return new ResponseEntity(barr, hearders, HttpStatus.CREATED);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(downFilePath);
return null;
}

 

posted @ 2017-09-08 14:22  小Q兵  阅读(189)  评论(0)    收藏  举报