您的位置:首页 > 其它

servlet利用fileupload实现文件上传

2012-08-16 20:06 399 查看
            为了实现文件上传,实现我们表单必须设置一个属性:

             enctype="multipart/form-data"。

      先看上传的jsp页面:

      <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

</head>

<body>
<form enctype="multipart/form-data" method="post" action="Fileupload">
上传文件1<input type="file" name="file1"/><br/>
上传文件2<input type="file" name="file2"/><br/>
普通文本域1<input type="text" name="text1"/><br/>
普通文本域2<input type="text" name="text2"/><br/>
<input type="submit" value="上传"><br/>
</form>
</body>
</html>

   实现上传功能的servlet

   package com.servlet;

import java.io.File;
import java.io.IOException;
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.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class Fileupload extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

doPost(request,response);

}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

DiskFileItemFactory factory = new DiskFileItemFactory();

//设定目录
String path = request.getRealPath("/upload");

//当文件大于某个尺寸时,不能直接写到内存中了,必须写到磁盘中,这个函数用来设定存储到磁盘
//中的路径
factory.setRepository(new File(path));

//用来设定当大于多少时,才必须直接写入硬盘
factory.setSizeThreshold(1024 * 1024);

ServletFileUpload sf = new ServletFileUpload(factory);

try {

List<FileItem> items = sf.parseRequest(request);

for(FileItem item : items)
{
//isFormField()判断是不是只是简单的文本域,如果是简单的文本域就不存储
if(item.isFormField())
{
System.out.println("普通的文本域");
}
//否则就是文件
else
{
//获取文件名
String value = item.getName();

//因为fileload针对 苹果浏览器 获得 的并不是 简单的 文件名 而已, 所以
//我们需要手动 把 前面的路径信息给去掉,当没有\的时候,start=-1
int start = value.lastIndexOf("\\");

//截取出我们需要的文件名
String fileName = value.substring(start +1 );

//把文件写到磁盘上
item.write(new File(path,fileName));

System.out.println("文件");
}
}

} catch (Exception e) {
e.printStackTrace();
}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息