一 配置SpringMVC ,并导入与文件上传下载有关的jar包
二 新建 相应 jsp 和controller
上传
Spring中文件上传的核心是使用 MultipartFile 类型的参数接收文件数据。
MultipartFile提供了以下常用方法:
boolean isEmpty() - 判断表单文件是否为空
String getOriginalFilename(); - 获取文件名
String getContentType() - 获取文件类型
long getSize() - 获取文件大小
byte[] getBytes() - 将文件转换为字节数组
InputStream getInputStream() - 将文件转换为输入流
void transferTo(File dest) - 文件保存的快捷方式
void transferTo(Path dest)
示例:
HTML代码
<!--enctype的属性设置必须为 multipart/form-data -->
<form action="uploadFile" method="post" enctype="multipart/form-data">
选择上传的文件:<input type="file" name="file" /><br/>
选择上传的文件:<input type="file" name="file" /><br/>
选择上传的文件:<input type="file" name="file" /><br/>
选择上传的文件:<input type="file" name="file" /><br/>
<input type="submit" value="上传" />
</form>
控制器代码
@RequestMapping(value = "/uploadFile")
public String upload(@RequestParam MultipartFile file[], HttpServletRequest request) {
// 获取到文件上传的真实路径
String path = request.getServletContext().getRealPath("/upload/");
// 获取到文件的名字
for (int i = 0; i < file.length; i++) {
String name = file[i].getOriginalFilename();
// 改名 把用户上传的文件进行改名操作
String newNmae = new Date().getTime() + new Random().nextInt(99999) + name;
// 实例化file类的对象 加载上传的路径和文件
File f = new File(path + newNmae);
try {
//MultipartFile里面的方法把这个路径的文件写入过去
file[i].transferTo(f);
} catch (IllegalStateException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return "success";
}
下载
示例:
HTML代码
<a href="download?fileName=xx.docx">下载文件</a><br/>
<a href="download?fileName=xx.png">下载图片</a>
控制器代码
@RequestMapping(value = "download")
public ResponseEntity<byte[]> download(@RequestParam("fileName") String fileName, HttpServletRequest request)
throws IOException {
//下载的路径
String path = request.getServletContext().getRealPath("/download/");
// 实例化file类的对象 加载下载的路径和文件
File f = new File(path + fileName);
//转格式
String newName = new String(fileName.getBytes("UTF-8"), "iso8859-1");
//转流
HttpHeaders hh = new HttpHeaders();
hh.setContentDispositionFormData("attachment", newName);
hh.setContentType(MediaType.APPLICATION_OCTET_STREAM);
//相应发送
return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(f), hh, HttpStatus.CREATED);
}