java web下的文件上传和下载
来源:互联网 发布:linux查看环境变量命令 编辑:程序博客网 时间:2024/05/22 17:35
在开发当中很多时候要用到文件上传,上传的时候可能会一次上传多个文件,并且还要保证上传的文件的文件名和文件类型都不变。我采用的spring的上传文件方式。
文件上传要引入两个jar包
文件上传部分
在spring的配置文件中要增加以下部分:
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--设置上传文件的最大值,现在是200M-->
<property name="maxUploadSize" value="204800"/>
</bean>
由于Post一个包含文件上传的Form会以multipart/form-data请求发送给服务器,必须明确告诉DispatcherServlet如何处理MultipartRequest。这样一旦某个Request是一个MultipartRequest,它就会首先被MultipartResolver处理,然后再转发相应的Controller。
接着在Controller中就可以将HttpServletRequest转型为MultipartHttpServletRequest,就能非常方便地得到文件名和文件内容。但是要注意,文件的上传和下载都是要转换成iso8859-1的编码形式进行的,所以获取到的时候要从iso8859-1的形式转换为其他形式,要不然中文的文件名就会乱码。
public void fileUpload(HttpServletRequest request, HttpServletResponse response) throws Exception{
MultipartHttpServletRequest multipart = (MultipartHttpServletRequest)request;
List<MultipartFile> fileList = multipart.getFiles("file");
for(MultipartFile file : fileList) {
//获取文件全名
String fileFullName = file.getOriginalFilename();
//获取后缀名
String suffixName = fileFullName.substring(fileFullName.lastIndexOf("."));
String firstName = fileFullName.substring(0, fileFullName.lastIndexOf("."));
//对文件名进行转码,不转码中文会乱码
firstName = new String(firstName.getBytes("iso8859-1"), "utf-8");
String pathFileName = "E:" + File.separator + "TDDOWNLOAD" + File.separator + firstName + suffixName;
InputStream input = file.getInputStream();
FileOutputStream fos = new FileOutputStream(pathFileName);
int i = input.read();
while(i != -1) {
fos.write(i);
i = input.read();
}
input.close();
fos.close();
}
}
对应的jsp部分:
<div>
<form action="index/fileUpload.do" method="post" enctype="multipart/form-data">
<input type="file" name="file"/>
<input type="file" name="file"/>
<input type="submit" value="submit"/>
</form>
</div>
这里的form要加上enctype="multipart/form-data"才能完成传输。
文件下载
文件的下载中,如果要下载的文件可能包含中文名的话,就要进行对应的转码,在浏览器端是使用iso8859-1的编码方式,所以要转成这种方式。
public void download(HttpServletRequest request, HttpServletResponse response) throws Exception {
String path = "E:" + File.separator + "TDDOWNLOAD" + File.separator + "直接硬盘安装原版Win7系统图解全过程.doc";
//对中文的文件名进行转码,不然会乱码
String fileName = new String("直接硬盘安装原版Win7系统图解全过程.doc".getBytes("utf-8"), "iso8859-1");
response.setHeader("Content-disposition", "attachment; filename=" + fileName);
response.setContentType("application/x-download");
response.setCharacterEncoding("UTF-8");
InputStream input = new FileInputStream(new File(path));
OutputStream out = response.getOutputStream();
byte[] b = new byte[1024];
int length;
while((length = input.read(b)) > 0) {
out.write(b, 0, length);
}
input.close();
out.close();
}
对应的jsp:
<a href="index/download.do">下载</a>
- java web下的文件上传和下载
- java web文件的上传和下载
- 用java在web环境下上传和下载文件
- Java乔晓松-文件的上传和下载(Web)
- Java乔晓松-文件的上传和下载(Web) 2
- Java乔晓松-文件的上传和下载(Web)案例
- Java Web文件上传和下载
- java web 文件上传和下载
- java web 多文件上传和下载
- web项目的文件上传和 下载
- web 文件的上传和下载
- web 文件上传和下载
- java web 中上传文件和下载文件代码片段
- 基于java的文件上传和下载
- java实现文件的上传和下载
- Java文件的上传和下载
- JAVA的文件上传和下载详解
- java实现文件的上传和下载
- 开发中经常用到的JSON解析
- Linux常用命令
- iOS面试题【附部分答案】2
- 进击的码农8
- merge_sort相比算法导论简易版本实现
- java web下的文件上传和下载
- Spring+Tomcat部署实践
- Linux系统配置常用指令
- 我的打字练习
- 通知、代理以及block的区别
- 【leetcode】303. Range Sum Query - Immutable
- NodeJs——(10)REST风格的路由规则
- iOS面试题3【附部分答案】
- 最后的课程设计