fileupload的主要功能是上传文件到服务器,或提供给客户端下载文件,使用fielupload时需要注意以下几点:
1、上传文件使用的都是form表单,表单有两种:
一种是默认的普通表单,它不能上传文件。它的属性值默认是enctype="application/x-www-form-urlencoded"。表示使用浏览器上一次解析页面的方式进行编码表单里的数据。
第二种是混合表单,它可以上传文件。必须设置它的属性enctype="multipart/form-data"。表示该表单项是混合出现的,不能进行编码。
2、在使用setFileSizeMax(param);时,param的大小是B(字节)为单位。
3、当定义了一个FileItme的对象item,String fileName = item.getName()时,使用IE7 fileName只有文件名 使用IE6 包含了路径,因此必须进行截取fileName = fileName.substring(fileName.lastIndexOf("/")+1);
4、当文件上传完毕后,会存在着临时文件,需要手动删除(假设定义FileItme的对象item,删除item.delete())。
附加:常见的文件MIME类型:
(.exe文件或未知的文件类型)--->application/octet-stream
(txt文本)--->text/plain
(html网页)--->text/html
(.jpg图片)---->image/pjpeg
(.png图片)---->image/x-png
(.avi视频)---->video/avi
(.execul的表格)---->application/vnd.ms-excel
java代码使用示例:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 1. 创建工厂类对象
DiskFileItemFactory factory = new DiskFileItemFactory();
// 2. 创建文件上传对象
ServletFileUpload upload = new ServletFileUpload(factory);
// 3. 判断表单类型
if(ServletFileUpload.isMultipartContent(request)){
try {
// 4.混合表单
List<FileItem> list = upload.parseRequest(request);
// 5. 遍历对象
for(FileItem item:list){
// 6. 判断是否是普通字段还是文件字段
if(item.isFormField()){
// 普通字段
String name = item.getFieldName();
String value = item.getString();
System.out.println(name+"="+value);
}else{
// 文件字段
String name = item.getFieldName();
String value = item.getString();
String fileName = item.getName();
String fileType = item.getContentType();
// 获取文件流
InputStream in = item.getInputStream();
// 定义上传的目录
String dir = this.getServletContext().getRealPath("/WEB-INF/uploads");
File file = new File(dir,fileName);
FileOutputStream out = new FileOutputStream(file);
byte[] b = new byte[1024];
int len = 0;
// 循环边读边写
while((len = in.read(b)) != -1){
out.write(b, 0, len);
}
// 释放资源
in.close();
out.close();
}
}
} catch (Exception e) {
System.out.println("上传失败");
}
}else{
// 普通表单
return;
}
}