解析从表单上传的文件(图片)等,可以使用fileupload 包 来简化操作过程。它能将页面上的表单和文件分离开来方法解析 HTTP 请求(即被包装之后的 HttpServletRequest 对象)出来,即分离出具体的文本表单和上传文件;而 ServletFileUpload 对象的创建需要依赖于 FileItemFactory 工厂将获得的上传文件 FileItem 对象保存至服务器硬盘,即 DiskFileItem 对象。JavaWeb中的文件上传注意事项:1、也是最容易忽略的一点:把JSP页面的<form>添加ENCTYPE="multipart/form-data"2、加入第三方文件上传的API到项目中,在这里使用apache的jakarta项目的commons-*包里的API3、文件上传步骤: 1)、首先调用ServletFileUpload.isMultipartContent(request)返回一个boolean值,如果是true 则表示request支持文件上传,这里可以加测试语句,如果是false就知道是在request出了问题, 可能就是传递request的jsp中的<form>没有添加ENCTYPE="multipart/form-data"
2)、FileItemFactory factory=new DiskFileItemFactory();
ServletFileUpload up=new ServletFileUpload(factory);
List<FileItem> items = upload.parseRequest(request);
item.isFormField() //用来判断当前对象是否是file表单域的数据 如果返回值是true说明不是 就是普通表单域
关键Java 代码举例
1.首先我们应该为上传的文件建一个存放的位置,一般位置分为临时和真是文件夹,那我们就需要获取这俩个文件夹的绝对路径,在servlet中我们可以这样做
ServletContext application = this.getServletContext();
String tempDirectory = application.getRealPath(Constant.TEMP_DIRECTORY) + "/";
String realDirectory = application.getRealPath(Constant.REAL_DIRECTORY) + "/";
然后建立文件工厂即仓库一个参数表示存放多大后flush,
FileItemFactory factory = new DiskFileItemFactory(Constant.SIZE_THRESHOLD,new File(tempDirectory));
ServletFileUpload upload = new ServletFileUpload(factory);
2.对上传的文件进行设定
[java] view plaincopy
upload.setSizeMax(500*1024*1024);//设置该次上传最大值为500M
3,.解析请求正文,获取上传文件,不抛出异常则写入真是路径
public void s(HttpServletRequest request) throws Exception
{
DiskFileItemFactory diskFactory = new DiskFileItemFactory();
// threshold 极限、临界值,即硬盘缓存 1M
diskFactory.setSizeThreshold(4 * 1024);
// repository 贮藏室,即临时文件目录
diskFactory.setRepository(new File("d:\\temp"));
ServletFileUpload upload = new ServletFileUpload(diskFactory);
// 设置允许上传的最大文件大小 4M
upload.setSizeMax(4 * 1024 * 1024);
List<FileItem> list = upload.parseRequest(request);
Iterator<FileItem> iter = list.iterator();
while (iter.hasNext())
{
FileItem item = iter.next();
// item.isFormField()用来判断当前对象是否是file表单域的数据 如果返回值是true说明不是 就是普通表单域
if (item.isFormField())
{
System.out.println("普通表单域" + item.getFieldName());
System.out.println(item.getString("utf-8"));
}
else
{
// System.out.println("file表单域" + item.getFieldName());
String lastpath = item.getName();// 获取上传文件的名称
lastpath = lastpath.substring(lastpath.lastIndexOf("."));
String filename = item.getName();
if ("".equals(filename) && item.getSize() == 0)
{
System.out.println("文件名为空 ...");
return;
}
item.write(new File(filename));
System.out.println(filename + " 文件保存完毕 ...");
}
}
}