javaweb文件上传
来源:互联网 发布:淘宝联盟加入购物车 编辑:程序博客网 时间:2024/05/17 22:16
- ------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
上传的jsp表单 注意格式一定要是:enctype="multipart/form-data" 表示上传文件
<form action="${pageContext.request.contextPath }/servlet/UploadServlet" enctype="multipart/form-data" method="post">
用户名:<input type="text" name="username"/><br/>
上传文件1:<input type="file" name="file1"/> <br/>
上传文件2:<input type="file" name="file2"/> <br/>
<input type="submit" value="上传"/>
</form>
注意:
1、上传文件名的中文乱码和上传数据的中文乱码
2、为保证服务器安全,上传文件应该在外界无法直接访问的目录
3、为防止文件覆盖现象发生,要为上传文件产生一个唯一的文件名
4、为防止一个目录下文件太多,要用hash算法打散
5、限制文件上传的最大值
6、想保证临时文件删除用item.delete();
7、限制文件类型,在收到文件名时判断后缀名
8、监听文件上传速度
package cn.dream.web.controller;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadBase;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.ProgressListener;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class UploadServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//当表单的content-type=multipart/form-data时无法通过这种方式获取属性,必须通过流
/* String username = request.getParameter("username");
System.out.println(username);
InputStream in = request.getInputStream();
int len = 0;
byte[] buff = new byte[1024];
while((len=in.read(buff))>0){
System.out.println(new String(buff,0,len));
}
in.close();*/
try {
//取得解析器工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setRepository(new File(this.getServletContext().getRealPath("/WEB-INF/temp")));
//取得解析器
ServletFileUpload upload = new ServletFileUpload(factory);
// upload.setFileSizeMax(1024); //设置上传的最大文件
upload.setProgressListener(new ProgressListener() {
@Override
public void update(long pBytesRead, long pContentLength, int pItems) {
System.out.println("总大小:" + pContentLength + ",以上传:" + pBytesRead);
}
});
//如果该request中的不是文件上传而是普通表单
upload.setHeaderEncoding("UTF-8"); //设置解析码表解决上传文件名乱码
if(!upload.isMultipartContent(request)){
return; //暂时先return 以后说
}
//如果是上传文件则解析request里的内容
List<FileItem> list = upload.parseRequest(request); //取得list集合
for(FileItem item : list){
if(item.isFormField()){ //如果是普通表单数据
String name = item.getFieldName(); //取得属性名
String value = item.getString(); //取得属性值
value = new String(value.getBytes("iso8859-1"),"utf-8"); //解决上传提交表单乱码
System.out.println(name + "=" + value);
}else{ //如果是文件
String filename = item.getName(); //文件可能是绝对路径
if(filename == null || filename.trim().equals("")){
continue;
}
filename = filename.substring(filename.lastIndexOf("\\")+1);//截取文件名
filename = makeFileName(filename);
InputStream in = item.getInputStream();
String dir = this.getServletContext().getRealPath("/WEB-INF/upload");
dir = makeDir(filename,dir);
FileOutputStream out = new FileOutputStream(dir + "\\" + filename);
int len = 0;
byte[] buff = new byte[1024];
while((len=in.read(buff))>0){
out.write(buff, 0, len);
}
in.close();
out.close();
item.delete(); //当文件上传成功后删除临时文件
}
}
}catch (FileUploadBase.FileSizeLimitExceededException e) {
request.setAttribute("message", "文件大小超过最大限制!!!!");
request.getRequestDispatcher("/message.jsp").forward(request, response);
return;
}
catch (FileUploadException e) {
e.printStackTrace();
}
}
private String makeDir(String filename, String dir) {
int hashcode = filename.hashCode();
int dir1 = hashcode&0xf;
int dir2 = (hashcode&0xf0)>>4;
dir = dir + "\\" + dir1 + "\\" + dir2;
File file = new File(dir); //利用file类判断文件是否存在,不在的话就创建
if(!file.exists()){
file.mkdirs();
}
return dir;
}
private String makeFileName(String filename) {
return UUID.randomUUID().toString() + "_" + filename;
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
0 0
- JavaWeb之文件上传
- javaweb文件上传
- JavaWeb之文件上传
- javaweb文件上传原理
- javaweb文件上传
- javaweb文件上传
- javaweb文件的上传
- JavaWeb之文件上传
- JavaWeb 文件上传
- JavaWeb文件上传
- JavaWeb文件上传
- javaWeb 文件上传功能
- JavaWeb常用文件上传
- 上传文件(javaWeb)
- JavaWeb 文件 上传 下载
- javaweb---上传文件
- JavaWeb文件上传、下载
- JavaWeb 文件 上传 下载
- Unity3d 开门的javascript脚本
- 二叉查找树(二叉排序树)的详细实现
- 临时表空间满了怎么办?怎么处理?
- 协议实例说明--租房
- Android Studio使用心得 - 简介与环境配置
- javaweb文件上传
- “石墨烯器件时代”还有多远?小电容带来大市场【www.shimoshop.com】
- Oracle 联机重做日志文件OnlineRedoLogFile
- Linux进阶——tar 解压缩命令
- Java如何通过WSDL文件来调用这些web service
- 32位win7系统下配置IIS遇到php-cgi.exe - FastCGI 进程意外退出问题的解决办法
- poj--2524
- hdu 4941 Magical Forest (map)
- UVA434 - Matty's Blocks