//获取上传文件
//创建上传文件的临时文件目录
String tempfilepath=this.getServletContext().getRealPath("/WEB_INF/temp");
File tempFile=new File(tempfilepath);
if(!tempFile.exists()) tempFile.mkdir();
//检查是否为多媒体上传,若不是返回
if(!ServletFileUpload.isMultipartContent(request))
{
out.print("需要设置表单的enctype属性");
return;
}
//构建磁盘文件工厂
DiskFileItemFactory factory=new DiskFileItemFactory();
factory.setRepository(tempFile);
factory.setSizeThreshold(1024*100);
//构建一个处理上传文件的对象
ServletFileUpload upload=new ServletFileUpload(factory);
//上传进度监听器
/* upload.setProgressListener(new ProgressListtener(){
public void update(long pBytesRead,long pContentLength,int arg2)
{
System.out.println("文件大小为:"+pContentLength+",当前已经上传:"+pBytesRead);
}
});*/
//防止乱码
upload.setHeaderEncoding("utf-8");
//设置单个文件上传的大小
upload.setFileSizeMax(1024*1024*30);
//开始解析上传文件
List<FileItem> items=upload.parseRequest(request);
for(FileItem item:items)
{
String filename=item.getName();
if(filename==null||filename.trim().equals(""))
continue;
//获得文件名
filename=filename.substring(filename.lastIndexOf("\\")+1);
//获取文件的拓展名
String filetype=filename.substring(filename.lastIndexOf(".")+1);
if(!"zip".equals(filetype)||!"rar".equals(filetype))
{
out.print("只能上传压缩文件");
return;
}
//获取文件的输入流
InputStream in=item.getInputStream();
//防止文件重名
String savename=UUID.randomUUID()+"_"+filename;
//得到文件的hashcode,就是filename这个字符串在内存中的地址
int filehascode=filename.hashCode();
int dir1=filehascode&0xf;
int dir2=(filehascode&0xf0)>>4;
//构建新的保存目录
String dir = savename + "\\" + dir1 + "\\" + dir2;
File f=new File(dir);
if(!f.exists()) f.mkdirs();
FileOutputStream outfile=new FileOutputStream(dir+"\\"+filename);
byte buffer[]=new byte[1024];
int len=0;
while((len=in.read(buffer))>0)
{
outfile.write(buffer,0,len);
}
in.close();
outfile.close();
}
//创建上传文件的临时文件目录
String tempfilepath=this.getServletContext().getRealPath("/WEB_INF/temp");
File tempFile=new File(tempfilepath);
if(!tempFile.exists()) tempFile.mkdir();
//检查是否为多媒体上传,若不是返回
if(!ServletFileUpload.isMultipartContent(request))
{
out.print("需要设置表单的enctype属性");
return;
}
//构建磁盘文件工厂
DiskFileItemFactory factory=new DiskFileItemFactory();
factory.setRepository(tempFile);
factory.setSizeThreshold(1024*100);
//构建一个处理上传文件的对象
ServletFileUpload upload=new ServletFileUpload(factory);
//上传进度监听器
/* upload.setProgressListener(new ProgressListtener(){
public void update(long pBytesRead,long pContentLength,int arg2)
{
System.out.println("文件大小为:"+pContentLength+",当前已经上传:"+pBytesRead);
}
});*/
//防止乱码
upload.setHeaderEncoding("utf-8");
//设置单个文件上传的大小
upload.setFileSizeMax(1024*1024*30);
//开始解析上传文件
List<FileItem> items=upload.parseRequest(request);
for(FileItem item:items)
{
String filename=item.getName();
if(filename==null||filename.trim().equals(""))
continue;
//获得文件名
filename=filename.substring(filename.lastIndexOf("\\")+1);
//获取文件的拓展名
String filetype=filename.substring(filename.lastIndexOf(".")+1);
if(!"zip".equals(filetype)||!"rar".equals(filetype))
{
out.print("只能上传压缩文件");
return;
}
//获取文件的输入流
InputStream in=item.getInputStream();
//防止文件重名
String savename=UUID.randomUUID()+"_"+filename;
//得到文件的hashcode,就是filename这个字符串在内存中的地址
int filehascode=filename.hashCode();
int dir1=filehascode&0xf;
int dir2=(filehascode&0xf0)>>4;
//构建新的保存目录
String dir = savename + "\\" + dir1 + "\\" + dir2;
File f=new File(dir);
if(!f.exists()) f.mkdirs();
FileOutputStream outfile=new FileOutputStream(dir+"\\"+filename);
byte buffer[]=new byte[1024];
int len=0;
while((len=in.read(buffer))>0)
{
outfile.write(buffer,0,len);
}
in.close();
outfile.close();
}