Created
August 17, 2013 15:12
-
-
Save zhuhai/6257358 to your computer and use it in GitHub Desktop.
文件的上传
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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