A》理论
使用的工具包 commons-fileupload
commons-fileupload.jar
commons-io.jar
这个小组件,它会帮我们解析request中的上传数据, 解析成功后结果封装到了一个FileItem对象中,我们只需要调用FileItem的方法即可!
1>上传三步
相关类
工厂类:DiskFileItemFactory
解析器 ServletFileUpload
表单项 FileItem
1,创建工厂:DiskFileitemFactory factory = new DiskFileItemFactory();
2,创建解析器:ServletFileUpload sfu = new ServletFileUpload(factory);
3,使用解析器来解析request , 把结果封装到FileItem对象中, List<FileItem> fileItem = sfu.parseRequest(request);
2>FileItem
boolean isFormField(); 是否为普通表单项!返回true 为普通表单项,如果为false即文件表单项
String getFileName(); 返回当前表单的名称
String getString(String charset) 返回表单项的值 (适合用于普通表单项)
String getName() 返回上传的文件名
long getSize() 返回上传文件的字节数
InputStream getInputStream() 返回上传文件的输入流
void write(File destFile) 把上传的文件内容保存到指定的文件中
B》代码 演示(文件的基本上传代码,没有加入任何限制,如大小,类型限制等)
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/*
* 上传三步
* 相关类 DiskFileItemFactory
* ServletFileUpload
* FileItem
* 1,创建工厂 DiskFileItemFactory factory = new DiskFileItemFtory();
* 2创建解析器 ServletFileUpload sfu = new ServletFileUpload(factory);
* 3,使用解析器来解析 request ,得到 FileItem集合 : List<FileItem> fileItem = sfu.parseRequest(request);
* FileItem API 接口
*
*/
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload sfu = new ServletFileUpload(factory);
try {
List<FileItem> fileItem = sfu.parseRequest(req);
FileItem f0 = fileItem.get(0);
FileItem f1 = fileItem.get(1);
System.out.println("普通表单项"+f0.getFieldName()+"="+f0.getString("utf-8"));
System.out.println("文件表单项");
System.out.println("Content-type:"+f1.getContentType());
System.out.println("size:"+f1.getSize());
System.out.println("fileName:"+f1.getName());
//保存文件
File destFile = new File("D:/image/"+CommonUtils.unid()+".jpg"); //CommonUtils 为自己所封装的一个文件名的工具,可以换成自己的
f1.write(destFile);
} catch (FileUploadException e) {
throw new RuntimeException(e);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
jsp 表单代码
<h1>选择图片后,点击按钮上传</h1>
<form action='<c:url value="/Upload" />' method="post" enctype="multipart/form-data">
<input type="text" size="45" name="name">
<input type="file" name="imgfile">
<!-- <button class="button" οnclick="ajaxFileUpload()">上传</button> -->
<button class="submit">上传</button>
</form>