将commons-fileupload-1.2.1.jar commons-io-1.4.jar引入项目
上传组件代码
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML >
<html>
<head>
<title>上传文件</title>
</head>
<body>
上传文件程序应用示例
<form action='action.jsp' method='post' enctype='multipart/form-data'>
<%-- 类型enctype用multipart/form-data,这样可以把文件中的数据作为流式数据上传,不管是什么文件类型,均可上传。--%>
请选择要上传的文件
<input type='file' name='upfile' size='1'>
<input type='submit' value='提交'>
</form>
</body>
</html>
接收文件代码
DiskFileUpload fu = new DiskFileUpload();
// 设置最大文件尺寸,这里是4MB
fu.setSizeMax(4194304);
// 设置缓冲区大小,这里是4kb
fu.setSizeThreshold(4096);
// 设置临时目录:
fu.setRepositoryPath(tempPath);
// 得到所有的文件:
List list=fu.parseRequest(request);
FileItem f=(FileItem)list.get(0);
DiskFileUpload类会抛出异常,所以必须用try代码块包起来,fu.parseRequest(request)返回的是List类型,不能用File类型接收,从List中读取文件时,最好也不用File类,而是用FileItem类,用前者我无法用getName()读出文件名,对其它没有深究,而FileItem是专门用来接收从表单传过来的文件的,所以最好用它读文件。
当文件大小超过最大尺寸时,异常会被抛出,当大小超过缓冲区尺寸时,会将文件暂时存在临时目录中
File des=new File("e:temp/img/"+x+".jpg");
f.write(des);
可以将上传的文件写进硬盘。
完整代码:
<%@ page language="java" import="java.util.*,java.io.*" pageEncoding="utf-8"%>
<%@ page import="org.apache.commons.fileupload.*" import="java.io.*"%>
<!DOCTYPE html >
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>接收文件</title>
</head>
<body>
<%
out.println("接收文件<br/>");
String tempPath="e:/temp";
try{
DiskFileUpload fu = new DiskFileUpload();
// 设置最大文件尺寸,这里是4MB
fu.setSizeMax(4194304);
// 设置缓冲区大小,这里是20kb
fu.setSizeThreshold(20480);
// 设置临时目录:
fu.setRepositoryPath(tempPath);
// 得到所有的文件:
List list=fu.parseRequest(request);
//out.println("1<br/>");
FileItem f=(FileItem)list.get(0);
//out.println("2<br/>");
String str="空";
str=f.getName();
out.println(str);
Random r=new Random();
int x=r.nextInt();
File des=new File("e:temp/img/"+x+".jpg");
f.write(des);
}catch(Exception e)
{
out.println("文件过大");
}
%>
</body>
</html>