java 上传文件
如果不依赖框架的话
要利用 Apache 中几个jar文件来处理
1、 给表单设置enctype属性,其值为 "multipart/form-data",另外,提交方式必须是post。
2、 在服务器端,不能够直接使用request.getParameter方法来获得数据。
只能使用InputStream request.getInputStream();通过分析这个字节流来获得数据。一般通过一些工具来分析。
3、要利用 Apache 中几个jar文件来处理 来分析文件流 主要要用到的几个jar 包。
commons-fileupload-1.2.2.jar
package download;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
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 FileUnload extends HttpServlet{
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String path = request.getSession().getServletContext().getRealPath("filedownload");
if(ServletFileUpload.isMultipartContent(request)){
DiskFileItemFactory factory = new DiskFileItemFactory(); // 基于磁盘文件项目创建一个工厂对象
factory.setRepository(factory.getRepository());
ServletFileUpload unload = new ServletFileUpload(factory); // 创建一个新的文件上传对象
int fileSize = 10*1024*1024; // 最大上传文件大小<= 10M
List formLists = null;
FileItem formItem;
try {
formLists = unload.parseRequest(request);// 解析上传
} catch (FileUploadException e) {
} finally {
}
Iterator iter = formLists.iterator(); // 枚举方法
while(iter.hasNext()){
formItem = (FileItem) iter.next();
if(!formItem.isFormField()){
if(formItem.getName()!=null &&!formItem.getName().equals("")){
long unloadSize = formItem.getSize();
if(unloadSize>fileSize){
System.out.println("文件大小超过10M!");
return;
}
}
String unloadFileName = formItem.getName();
String newFileName = path+File.separator+unloadFileName;
File file = new File(newFileName);
try {
formItem.write(file);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
}