首先的需要两个包,链接里面有两个包https://download.csdn.net/download/qq_35986709/10893851
文件上传对页面的要求
- 必须使用表单,而不能是超链接;
- 表单的method必须是POST,而不能是GET;
- 表单的enctype必须是multipart/form-data;
- 在表单中添加file表单字段,即
Servlet的要求:
不能再使用request.getParameter()来获取表单数据;
可以使用request.getInputStream()得到所有的表单数据,而不是一个表单项的数据;
这说明不使用fileupload,我们需要自己来对request.getInputStream()的内容进行解析!!!
<form action="${pageContext.request.contextPath }/FileUploadServlet" method="post" enctype="multipart/form-data"> 用户名:<input type="text" name="username"/><br/> 文件1:<input type="file" name="file1"/><br/> 文件2:<input type="file" name="file2"/><br/> <input type="submit" value="提交"/> </form>
DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
//解析工厂类
ServletFileUpload servletFileUpload=new ServletFileUpload(diskFileItemFactory);
//设置编码为utf-8,以防乱码
servletFileUpload.setHeaderEncoding("utf-8");
try {
//解析request请求
List<FileItem> fileItems = servletFileUpload.parseRequest(request);
//定义map用来接收表单数据
LinkedHashMap<String,String> formMap=new LinkedHashMap<String,String>();
//遍历接收到的数据
for (FileItem fileItem : fileItems) {
//判断是是表单文件,如果不是表单文件,则创建文件写入文件数据
if (!fileItem.isFormField()){
if (fileItem.get().length>0&&fileItem.getFieldName()!=null) {
String realpath = request.getServletContext().getRealPath("/static");
File file = new File(realpath + "/wapian/images/logo.png");
if (!file.exists())
file.createNewFile();
fileItem.write(file);
}//否则就是表单文件
}else {
formMap.put(fileItem.getFieldName(),new String(fileItem.get(),"UTF-8"));
}
}
} catch (Exception e) {
e.printStackTrace();
}
另外还有关于FileItem的方法
String getName():获取文件字段的文件名称;
String getString():获取字段的内容,如果是文件字段,那么获取的是文件内容,当然上传的文件必须是文本文件;
String getFieldName():获取字段名称,例如:,返回的是username;
String getContentType():获取上传的文件的类型,例如:text/plain。
Long getSize():获取上传文件的大小;
boolean isFormField():判断当前表单字段是否为普通文本字段,如果返回false,说明是文件字段;
InputStream getInputStream():获取上传文件对应的输入流;
void write(File):把上传的文件保存到指定文件中。
byte[] get():获得数据的字节数组