一、单个文件上传和下载
二、下载多个文件时打成zip压缩包
使用的是Apache的upload 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>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.9</version>
</dependency>
单个文件上传
@RequestMapping("/upload")
protected void Upload(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// 1.解析器解析request的上下文
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(
request.getSession().getServletContext());
// 2.先判断request中是否包涵multipart类型的数据(即:判断 request 是否有文件上传,即多部分请求 )
if (multipartResolver.isMultipart(request)) {
//3. 再将request中的数据转化成multipart类型的数据(即: 转换成多部分request )
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
// 4.取得request中的所有文件并将其存到硬盘中
Iterator<String> iter = multiRequest.getFileNames();
while (iter.hasNext()) {
// 5.取得上传文件
MultipartFile file = multiRequest.getFile((String) iter.next());
// 如果名称不为“”,说明该文件存在,否则说明该文件不存在
if (file != null) {
// 6.取得当前上传文件的文件名称
String fileName = file.getOriginalFilename();
if(fileName.trim() != "") {
// 7.定义上传路径
String path = "D:/" + fileName;
//8.新建文件
File localFile = new File(path);
// 9.写文件到本地
file.transferTo(localFile);
}
}
}
}
}
单个文件下载(在Java里写下载代码,可以做下载限速和权限检查)
@RequestMapping("/download")
protected ResponseEntity<byte[]> Download() throws IOException {
File file = new File("D:/2.txt");
String fileName = "2.txt";
String dfileName = new String(fileName.getBytes("gb2312"), "iso8859-1");
HttpHeaders headers = new HttpHeaders();
headers.setContentDispositionFormData("attachment", dfileName);
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
/**
* HttpStatus.OK 和 HttpStatus.CREATE 区别
* 使用后者的话 在ie11里无法下载
*/
ResponseEntity<byte[]> re = new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),
headers, HttpStatus.OK);
return re;
}
普通单个文件的下载方法:(没有试验过)
@RequestMapping(value = "/downloadFile")
@ResponseBody
public void downloadFile (HttpServletResponse response) {
OutputStream os = null;
try {
os = response.getOutputStream();
File file = new File("D:/javaweb/demo.txt");
// Spring工具获取项目resources里的文件
File file2 = ResourceUtils.getFile("classpath:shell/sinit.sh");
if(!file.exists()){
return;
}
response.reset();
response.setHeader("Content-Disposition", "attachment;filename=demo.txt");
response.setContentType("application/octet-stream; charset=utf-8");
os.write(FileUtils.readFileToByteArray(file));
} catch (Exception e) {
e.printStackTrace();
}finally{
下载文件>=1个时打成zip压缩包
/**
* 打包压缩下载文件
*/
@RequestMapping("/downLoadZipFile")
public void downLoadZipFile( HttpServletResponse response) throws IOException{
String zipName = "myfile.zip";
response.setContentType("APPLICATION/OCTET-STREAM");
response.setHeader("Content-Disposition","attachment; filename="+zipName);
ZipOutputStream out = new ZipOutputStream(response.getOutputStream());
List<FileEntry> fileList = new ArrayList<FileEntry>();
FileEntry file = new FileEntry();
file.setPathName("D:/1.xlsx");
file.setName("1.xlsx");
fileList.add(file);
FileEntry file1 = new FileEntry();
file1.setPathName("D:/t.xlsx");
file1.setName("t.xlsx");
fileList.add(file1);
try {
for(Iterator<FileEntry> it = fileList.iterator();it.hasNext();){
FileEntry file2 = it.next();
ZipUtils.doCompress(file2.getPathName(), out);
response.flushBuffer();
}
} catch (Exception e) {
e.printStackTrace();
}finally{
out.close();
}
}
本文介绍了一个基于Apache Commons组件实现的文件上传与下载功能,包括单个文件上传、单个文件下载及多个文件压缩下载的方法。
402

被折叠的 条评论
为什么被折叠?



