文件上传:SmartUpload和FileUpload


一、文件上传简介


文件上传在HTML中是以<input type="file">的形式出现的。

文件上传有两种选择:

(1)SmartUpload:以jar包形式出现,需要把他添加到classpath或tomcat的lib文件夹下。

(2)FileUpload:以jar包形式出现,需要把他添加到classpath或tomcat的lib文件夹下。

对于SmartUpload,现在使用的较多。


二、SmartUpload


1.一般代码流程


SmartUpload smart = new SmartUpload();

smart.initialize(pageContext);

smart.upload();

smart.save("file");

实现的功能是将上传到的文件保存在/file文件夹下,并以同名进行保存。


2.表单注意事项


文件上传规定:表单必须有enctype="multipart/form-data"这个属性;因此表单是以二进制数据上传的。


3.获取表单中其他普通控件的值


因为有了文件上传控件后,表单的其他控件传递数据不能通过普通的request.getParameter(),而需要smart.getRequest().getParameter();


4.自定义存储文件名称


String ext = smart.getFiles().getFile(0).getFileExt();

smart.getFiles().getFile(0).saveAs(this.getServletContext().getRealPath("/")+filename+"."+ext);

filename就是文件自定义名称,ext就是文件扩展名。


5.批量上传


for(int i=0;i<smart.getFiles().getCount();i++){

String ext = smart.getFiles().getFile( i ).getFileExt();

smart.getFiles().getFile( i ).saveAs(this.getServletContext().getRealPath("/")+filename+"."+ext);

}即可。

从以上看出,SmartUpload的代码量不会特别多,比较方便。


三、FileUpload


FileUpload是apache的commons项目的子项目,需要下载jar包,注意:还要把commons-io.jar也下下来,因为这两个包是相互关联的。


1.一般代码流程


DiskFileItemFactory factory = new DiskFileItemFactory();

ServletFileUpload upload = new ServletFileUpload(factory);

upload.setFileSizeMax(1024*1024);//设置上传文件的最大容量

List<FileItem>items = upload.parseRequest(request); //取得表单全部数据

含有文件上传控件的表单是不能区分一般控件和上传控件的,都作为FileItem;


2.区分一般控件数据和文件上传控件数据


通过item.isFormField()能够判断,如果返回true,则表示一般控件数据。


3.取得控件数据


item.getFieldName()返回域名称。

(1)如果是一般控件,则item.getString()即可。

(2)如果是文件上传控件,则包含一些方法

item.getName();取得上传文件的名称

item.getContentType();取得上传文件的mime类型

longitem.getSize();取得上传文件的大小

item.getInputStream();取得上传文件的输入流


4.保存文件


在SmartUpload中,只需要save函数即可,但是在FileUpload中,需要IO流。

InputStream input = item.getInputStream();

FileOutputStream output = new FileOutputStream("file.txt");

byte[] buf = new byte[1024];

int length = 0;

while((length=input.read(buf))!=-1){

output.write(buf,0,length);

}

input.close();

output.close();

即可。


5.取得文件后缀


String ext = item.getName().split("\\.")[1];

你可能感兴趣的:(SmartUpload)