使用 Apache的Commons FileUpload 组件
1、commons-io-1.4.jar及commons-io-1.2.1.jar包导入到工程中
//必须是multipart的表单数据。
<form name="myform" action="demo1.jsp" method="post"
enctype="multipart/form-data">
Your name: <br>
<input type="text" name="name" size="15"><br>
File:<br>
<input type="file" name="myfile"><br>
<br>
<input type="submit" name="submit" value="Commit">
</form>
//产生一个磁盘文件项的工厂对象
DiskFileItemFactory factory=new DiskFileItemFactory();
//通过工厂对象获得一个文件上传的对象
ServletFileUpload upload=new ServletFileUpload(factory);
//解析request请求中的参数,获得的所有请求参数,并且将请求的参数存放到一个list集合中,list集合中的每一个值都是一个体FileItem类型的对象
List list=upload.parseRequest(request);
for(int i=0;i<list.size();i++){
FileItem item=(FileItem)list.get(i); //循环读取出每个参数
//判断当前的这个item是一个普通的表单元素,还是一个文件域元素
true表明这是一个普通的表单元素 false 表示这个item是一个文件域
if(!item.isFormField()){ //
//判断这是不是一个空值
if(item.getName()!=null&& !item.getName().equals("")){
System.out.println("上传文件的大小为:"+item.getSize());
System.out.println("上传文件的类型为:"+item.getContentType());
System.out.println("上传文件的名字为:"+item.getName());
//下面开始真正的保存到Tomcat服务器对应站点的目录images下
File file=new File(item.getName());
//真正保存上传图片的文件
File realFile=new File(pageContext.getServletContext().getRealPath("/")+"images",file.getName());
System.out.println("上传文件的名字为:"+file.getName());
System.out.println("最后保存到的服务器的路径为:"+realFile);
//写入到服务器磁盘中
item.write(realFile);
第二种方法:
String uploadPath="D:\\temp";
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if(isMultipart==true){
try{
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List<FileItem> items = upload.parseRequest(request);//得到所有的文件
Iterator<FileItem> itr = items.iterator();
while(itr.hasNext()){//依次处理每个文件
FileItem item=(FileItem)itr.next();
if (!item.isFormField()) {
String fileName=item.getName();//获得文件名,包括路径
if(fileName!=null){
File fullFile=new File(item.getName());
File savedFile=new File(uploadPath,fullFile.getName());
item.write(savedFile);
}
}
}
out.print("upload succeed");
}
catch(Exception e){
e.printStackTrace();
}
}
else{
out.println("the enctype must be multipart/form-data");
}
上传一个文件到指定的目录,并限定文件大小。
File uploadPath = new File("D:\\temp");//上传文件目录
if (!uploadPath.exists()) {
uploadPath.mkdirs();
}
// 临时文件目录
File tempPathFile = new File("d:\\temp\\buffer\\");
if (!tempPathFile.exists()) {
tempPathFile.mkdirs();
}
try {
// Create a factory for disk-based file items
DiskFileItemFactory factory = new DiskFileItemFactory();
// Set factory constraints
factory.setSizeThreshold(4096); // 设置缓冲区大小,这里是4kb
factory.setRepository(tempPathFile);//设置缓冲区目录
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
// Set overall request size constraint
upload.setSizeMax(4194304); // 设置最大文件尺寸,这里是4MB
List<FileItem> items = upload.parseRequest(request);//得到所有的文件
Iterator<FileItem> i = items.iterator();
while (i.hasNext()) {
FileItem fi = (FileItem) i.next();
String fileName = fi.getName();
if ( !fi.isFormField()&&fileName != null) {
File fullFile = new File(fi.getName());
File savedFile = new File(uploadPath, fullFile
.getName());
fi.write(savedFile);
}
}
out.print("upload succeed");
} catch (Exception e) {
e.printStackTrace();
}
struts1.x 的上传:
private void upload(ActionContext context, DynaValidatorForm frm,
) {
Hashtable files = frm.getMultipartRequestHandler().getFileElements();
java.util.Enumeration enum = files.keys();
String fname = "";
while (enum.hasMoreElements()) {
fname = (String) enum.nextElement();
FormFile ff = (FormFile) files.get(fname);
if (!(ff == null || ff.getFileSize() == 0
|| ff.getFileName() == null || ff.getFileName().equals(""))) {
try {
Calendar cal = Calendar.getInstance();
String fileName = ff.getFileName()+String.valueOf(cal.getTimeInMillis());
InputStream stream = ff.getInputStream();
String filePath = context.getRequest().getRealPath("/"); //取当前系统路径
//建立一个上传文件 的输出流,将上传文件存入web的根目录
OutputStream bos = new FileOutputStream(filePath + "zjh/"
+ fileName);
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = stream.read(buffer, 0, 8192)) != -1) {
bos.write(buffer, 0, bytesRead);//将文件写入服务器
}
bos.close();
stream.close();
} catch (Exception fnfe) {
fnfe.printStackTrace(System.out);
}
}
}
struts.xml 文件:
<form-bean name="zjhDownLoadForm" type="org.apache.struts.validator.DynaValidatorForm">
<form-property name="saction" type="java.lang.String"></form-property>
<form-property name="ZJH_DOWNLOAD"
type="org.apache.struts.upload.FormFile" />
</form-bean>