FielUpload是Apache提供的一个免费的上传组件,在使用它之前,我们需要先下载两个包FileUpload包(http://commons.apache.org/proper/commons-fileupload/)和Commons包(http://commons.apache.org/proper/commons-io/)
下面是FileUpload上传的基本步骤:
(1)创建磁盘工厂:DiskFileItemFactory factory = new DiskFileItemFactory() ;
(2)创建处理工具:ServletFileUpload upload = new ServletFileUpload(factory) ;
(3)设置上传文件的大小:upload.setFileSizeMax(3145728) ;
(4)接收全部的内容:List<FileItem> items = upload.parseRequest(request) ;
例子:
DiskFileItemFactory factory = new DiskFileItemFactory() ; //创建磁盘工厂
factory.setRepository(new File(临时文件夹路径)) ; //创建处理工具
upload.setFileSizeMax(3145728) ; //设置最大上传文件大小为3MB,3*1024*1024
List<FileItem> items = upload.parseRequest(request) ; //接收全部内容
Iterator<FileItem> item = items.iterator() ; //将全部的内容变为Iterator实例
IPTimeStamp its = new IPTimeStamp(request.getRemoteAddr()) ; //实例化IP时间戳对象
while(item.hasNext()){ //依次取出每一个内容
try{
FileItem item = iter.next() ; //取出每一个上传的文件
String fieldName = item.getFieldName() ; //得到表单控件的名称
if(!item.isFormField()){ //不是普通的文本数据,是上传文件
File saveFile = null ; //定义保存的文件
InputStream input = null ; //定义文件的输入流,用于读取源文件
OutputStream output = null ; //定义文件的输出流,用于保存文件
input = item.getInputStream() ; //取得上传文件的输入流
output = new FileOutputStream(new File(路径+item.getName().split("\\.")[1])) ; //定义输出文件路径
byte data[] = new byte[512] ; //分块保存
int temp = 0 ;
while((temp = input.read(data,0,512)) != -1){ //依次读取内容
output.write(data) ; //保存内容
}
}
}catch(IOException e){
throw e ;
}finally{
try{
input.close() ; //关闭流
output.close() ;
}catch(IOException e1){
throw e1 ;
}
}
}
几个方法:
取得文件名称:getName() ;
取得文件类型:getContentType() ;
取得文件大小:getSize() ;