1、我使用的是ServletFileUpload来实现同个form表单中图片和文字信息的同时上传(支持多文件上传),首先我们先看下前端JSP页面的实例代码:
<form action="servlet/TestServlet" enctype="multipart/form-data" method = "post">
<input type = "text" name = "text1"><br>
<input type = "text" name = "text2"><br>
<input type = "file" name = "file1"><br>
<input type = "file" name = "file2"><br>
<input type = "submit" value = "提交">
</form>
2、获取text或者是文件上传的内容,需要先判断是否为文件上传。
fileItem.isFormField()
其他参数如下:
String name = fileItem.getFieldName(); // 获取name属性的值
String value = fileItem.getString(); // 获取value属性的值
String fieldName = fileItem.getFieldName(); // 文件域中name属性的值
String fileName = fileItem.getName(); // 文件的全路径(firefox获得的文件名)
String contentType = fileItem.getContentType(); // 文件的类型
long size = fileItem.getSize(); // 文件的大小,以字节为单位
3、文件上传代码
fileItem.write(new File(filePath));
//filepath为文件上传之后的路径
以下为我的实例代码:
request.setCharacterEncoding("utf-8");
//构造一个缓冲区大小为sizeThreshold和临时文件为目录为repository的文件项工厂。
DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
//使用factory的缓冲区和临时文件
ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);
List<FileItem> fileItems = null;
try {
//获得表单中提交的数据(为List集合)
fileItems = servletFileUpload.parseRequest(request);
} catch (FileUploadException e) {
e.printStackTrace();
}
String gallery_id = null;
String gallery_imgName = null;
String gallery_information = null;
String gallery_imgUrl = null;
String filePath = "E:\\java project\\NetBankSystem\\web\\";//创建一个存放上传文件的目录
String imgName = null;
//遍历表单中提交的数据
Iterator iter = fileItems.iterator();
while (iter.hasNext()){
FileItem fileItem = (FileItem) iter.next();
//如果是表单域,不是文件类型
if (fileItem.isFormField()){
//获取value值,声明代码编码
String value = fileItem.getString("utf-8");
if (fileItem.getFieldName().equals("gallery_id")){//对应form中的name值
gallery_id = value;
}else if (fileItem.getFieldName().equals("gallery_imgName")){
gallery_imgName = value;
}else if (fileItem.getFieldName().equals("gallery_information")){
gallery_information = value;
}
}else {
//获取文件域中的name属性的值
gallery_imgUrl = fileItem.getFieldName();
imgName = fileItem.getName();
if(imgName != null && !imgName.equals("")){
try {
fileItem.write(new File(filePath + gallery_imgUrl));
} catch (Exception e) {
e.printStackTrace();
}
}
}
}