记录大学自学中遇到的bug. 之前也遇到很多,就算现在这个是第一个开始记录
12.13日晚上遇到的,次日中午才解决。
出现原因:我在multipart/form-data表单格式获取参数的时候用了getParameter来获取,Servlet前还加了这个注解@MultipartConfig,然后后面用那个uoload api (List<FileItem> list = servletFileUpload.parseRequest(req);)就不能再次获取了(我也不知道为什么,反正我的就是这么个情况),获取出来的list表单的size就一直是0,要获取form表单除文件的参数值的话就得在遍历list的时候解析,以下是我Servlet的源码希望能解决和我遇到一样问题的小伙伴~
import com.Ewan.utils.JsonUtils;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.springframework.web.multipart.MultipartException;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import org.springframework.web.multipart.support.StandardMultipartHttpServletRequest;
import javax.json.Json;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@MultipartConfig
public class Upload extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html; charset=UTF-8");
req.setCharacterEncoding("UTF-8");
String fullPath = "";
String overwrite = "";
String json = null;
PrintWriter writer = resp.getWriter();
//1 先判断上传的数据是否多段数据(只有是多段的数据,才是文件上传的)
if (ServletFileUpload.isMultipartContent(req)) {
//创建FileItemFactory工厂实现类
FileItemFactory fileItemFactory = new DiskFileItemFactory();
// 创建用于解析上传数据的工具类ServletFileUpload类
ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory);
// 解析上传的数据,得到每一个表单项FileItem
try {
List<FileItem> list = servletFileUpload.parseRequest(req);
//获取参数信息
for (FileItem fileItem : list) {
if (fileItem.isFormField()) {
if ("fullPath".equals(fileItem.getFieldName())) {
fullPath = fileItem.getString("UTF-8");
}
if ("overwrite".equals(fileItem.getFieldName())) {
overwrite = fileItem.getString("UTF-8");
}
}
}
//解析文件
for (FileItem fileItem : list) {
if (!fileItem.isFormField()) {
File file = new File("D://FileDemo/" + fullPath);
if (overwrite.equals("false") && file.isFile() && file.exists()) {
json = JsonUtils.returnJsonStringForLogin("", false, "ERR_FILE_EXIST");
} else {
String absolutePath = file.getPath();
fileItem.write(new File( absolutePath));
json = JsonUtils.returnJsonStringForLogin("", true, "操作成功");
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
if (json == null) json = JsonUtils.returnJsonStringForLogin("", false, "请上传文件");
writer.write(json);
writer.close();
}
}