我是刚学习移动开发的,无奈也要写点后端数据作为前端开发学习的数据接口支持,我前端用模拟表单的模式实现了多文件上传,这个没问题了,但是后端问题比较大个,就是用java servlet开发接口出现读取表单数据上传的多文件数据用了ServletFileUpload.parseRequest(request)这个方法,返回的List的size=0,查了很多说因为spring已经有默认文件上传组件,使用ServletFileUpload时需要关闭spring boot的默认配置,解决方法:
在yml配置文件中添加
spring.servlet.multiparty.enabled=false;
现在问题是我找不到这个文件!
我用的是eclipse作为后端开发!而且spring不应该是需要配置才有的吗?我的项目啥也没有怎么也冲突了,有没有伙伴帮忙解答下!感恩!
下面是部分代码!
private String uploadParseRequest(HttpServletRequest httpServletRequest, ServletFileUpload servletFileUpload, String uploadPath)
throws FileUploadException, IOException {
String msg = "";
// 解析前端请求,将每个表单项解析并封装成FileItem对象
// List<FileItem> items = servletFileUpload.parseRequest(new ServletRequestContext(httpServletRequest));
List<FileItem> fileItems = servletFileUpload.parseRequest(httpServletRequest);
//这里获得的fileItems.size=0
for (FileItem fileItem : fileItems) {
// 判断表单项是否为上传文件
if (fileItem.isFormField()) { // 普通文本
String filedName = fileItem.getFieldName(); // 获取字段名:表单项name属性的值
String value = fileItem.getString("UTF-8"); // FileItem对象中保存的数据流内容:即表单项为普通文本的输入值
System.out.println(filedName + ":" + value);
} else { // 上传文件
// ------------------------1、处理文件------------------------
String uploadFileName = fileItem.getName();// 上传文件名
System.out.println("上传的文件名:" + uploadFileName);
if (uploadFileName == null || uploadFileName.trim().equals("")) { // 文件名为空值或空
continue; // 进入下一轮循环,判断下一个FileItem对象
}
String fileExtName = uploadFileName.substring(uploadFileName.lastIndexOf(".") + 1); // 文件后缀名
System.out.println("文件信息【文件名:" + uploadFileName + ",文件类型:" + fileExtName + "】");
// 使用UUID保证文件名唯一
String uuidPath = UUID.randomUUID().toString();
// ------------------------2、处理路径------------------------
// 存储路径:uploadPath
String realPath = uploadPath + '/' + uuidPath; // 真实存在的路径
// 给每个文件创建一个文件夹
File realPathFile = new File(realPath);
makeDirIfNotExist(realPathFile);
// ------------------------3、文件传输------------------------
// 获得输入流
InputStream is = fileItem.getInputStream();
// 获得输出流
FileOutputStream fos = new FileOutputStream(realPathFile + "/" + uploadFileName);
// 创建缓冲区
byte[] buffer = new byte[1024];
int len;
while ((len = is.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
msg = "文件上传成功!";
fileItem.delete(); // 上传成功,清除临时文件
fos.close();
is.close();
}
}
return msg;
}