Skip to content

Instantly share code, notes, and snippets.

@zhuhai
Created August 17, 2013 15:12
Show Gist options
  • Save zhuhai/6257358 to your computer and use it in GitHub Desktop.
Save zhuhai/6257358 to your computer and use it in GitHub Desktop.
文件的上传
package com.kaishengit.web;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
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.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class FileUploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.sendRedirect("upload.jsp");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//服务器端存放文件的文件夹
File uploadFile=new File("C:/upload");
//服务器端存放临时文件的文件夹
File tempFile=new File("C:/temp");
if(!uploadFile.exists()){
uploadFile.mkdir();
}
if(!tempFile.exists()){
tempFile.mkdir();
}
//ServletFileUpload.isMultipartContent(request)用来判断是否设置form表单的enctype属性(enctype="multipart/form-data")
if(ServletFileUpload.isMultipartContent(request)){
DiskFileItemFactory factory=new DiskFileItemFactory();
//设置缓冲区
factory.setSizeThreshold(1024*1024);
//设置临时文件目录
factory.setRepository(tempFile);
ServletFileUpload servletFileUpload=new ServletFileUpload(factory);
//设置最大上传文件体积
servletFileUpload.setSizeMax(1024*1024*10);
try {
@SuppressWarnings("unchecked")
//获得所有表单元素
List<FileItem> itemList=servletFileUpload.parseRequest(request);
for(FileItem item:itemList){
//判断是不是一个普通的表单元素
if(!item.isFormField()){
//获取原始文件名
String fileName=item.getName();
//获取文件的类型
//String typeName=item.getContentType();
//获取文件的后缀名
String extName=fileName.substring(fileName.lastIndexOf("."));
//给上传的文件随机生成一个文件名
fileName=UUID.randomUUID().toString()+extName;
InputStream inputStream=item.getInputStream();
BufferedInputStream bis=new BufferedInputStream(inputStream);
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(new File(uploadFile, fileName)));
byte[] buffer=new byte[4096];
int len=-1;
while((len=bis.read(buffer))!=-1){
bos.write(buffer, 0, len);
}
bos.flush();
bos.close();
bis.close();
}else{
//获取普通表单的内容
String desc=item.getString("UTF-8");
System.out.println(desc);
}
}
} catch (FileUploadException e) {
throw new RuntimeException("请设置form表单的enctype属性");
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment