老师,我的ParamDto里面的FileMap下的excel为空
点击导入之后在D://Upload下有导入的文件,但是浏览器如下

之后我再ImportExcelServlet中加入一些输入语句,ImportExcelServlet代码如下
package org.imooc.Servlet;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.imooc.dto.*;
import org.imooc.service.*;
import org.imooc.util.RequestUtil;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class ImportExcelServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 判断是普通表单还是带文件上传的表单
if (ServletFileUpload.isMultipartContent(req)) {
// 调用解析request请求的方法
ParamDto dto = RequestUtil.parseParam(req);
System.out.println(dto.toString());
System.out.println("解析请求,返回ParamDto,存放List两个集合");
ImpotrExcelParamDto paramDto = new ImpotrExcelParamDto();
paramDto.setTitle(dto.getParamMam().get("title"));
paramDto.setExcel(dto.getFileMap().get("excel"));
System.out.println(paramDto.toString());
System.out.println("把返回的ParamDto中的两个集合分别取出来,存入ImportExcelDto");
ExcelService service = new ExcelService();
System.out.println("新建service对象");
ImpotrExcelResultDto resultDto = service.imp(paramDto);
System.out.println("保存文件并解析");
req.setAttribute("resule", resultDto);
System.out.println("把解析的结果存入request作用域中");
System.out.println(resultDto.toString());
} else {
}
req.getRequestDispatcher("/WEB-INF/jsp/importExcelResult.jsp").forward(req, resp);
}
}
控制台输出如下
ParamDto{paramMam={title=啦啦啦}, fileMap={excel=name=C:\Users\xiaolei\Desktop\新建 Microsoft Excel 工作表.xlsx, StoreLocation=D:\Tomcat\apache-tomcat-9.0.8\temp\upload_6f1cdc09_d1a1_4fe8_8617_c83d3db02067_00000001.tmp, size=9163 bytes, isFormField=false, FieldName=excel}}
解析请求,返回ParamDto,存放List两个集合
ImpotrExcelParamDto{title='啦啦啦', excel=name=C:\Users\xiaolei\Desktop\新建 Microsoft Excel 工作表.xlsx, StoreLocation=D:\Tomcat\apache-tomcat-9.0.8\temp\upload_6f1cdc09_d1a1_4fe8_8617_c83d3db02067_00000001.tmp, size=9163 bytes, isFormField=false, FieldName=excel}
把返回的ParamDto中的两个集合分别取出来,存入ImportExcelDto
新建service对象
保存文件并解析
把解析的结果存入request作用域中
ImpotrExcelResultDto{title='啦啦啦', studentList=[], msg='保存文件失败!'}
ExcelServices代码如下:
package org.imooc.service;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.imooc.dto.ImpotrExcelParamDto;
import org.imooc.dto.ImpotrExcelResultDto;
import org.imooc.entity.Student;
import org.imooc.util.FileUtil;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class ExcelService {
public ImpotrExcelResultDto imp(ImpotrExcelParamDto dto) {
ImpotrExcelResultDto result=new ImpotrExcelResultDto();
result.setTitle(dto.getTitle());
List<Student> studentList = new ArrayList<Student>();
result.setStudentList(studentList);
String fileName = null;
try {
// 保存文件,接收返回的保存文件名
fileName = FileUtil.save(dto.getExcel(), FileUtil.SAVE_PATH);
} catch (Exception e) {
result.setMsg("保存文件失败!");
}
// 如果文件名不为空,则保存文件成功,解析
if (fileName != null) {
try {
Workbook workbook = WorkbookFactory.create(new File(FileUtil.SAVE_PATH + fileName));
Sheet sheet = workbook.getSheetAt(0);
int rowNum = sheet.getLastRowNum();
for (int i = 1; i <= rowNum; i++) {
Row row = sheet.getRow(i);
Student student=new Student();
student.setName(row.getCell(0).getStringCellValue());
student.setAge((int) row.getCell(1).getNumericCellValue());
studentList.add(student);
}
} catch (Exception e) {
result.setMsg("解析文件失败!");
}
}
return result;
}
}
RequestUtil代码如下
package org.imooc.util;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.imooc.dto.ParamDto;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.util.List;
public class RequestUtil {
/**
* 从request流中解析参数与上传文件
*
* @param request
*/
public static ParamDto parseParam(HttpServletRequest request) {
ParamDto result = new ParamDto();
// 新建文件上传对象,处理上传
ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory());
// 设置编码
upload.setHeaderEncoding("UTF-8");
try {
// 解析上传文件
List<FileItem> fileItemList = upload.parseRequest(request);
for (FileItem fileItem : fileItemList) {
String filename = "";//用于存放文件的有效文件名
if (fileItem.isFormField()) {
// 是表单项
result.getParamMam().put(fileItem.getFieldName(), fileItem.getString("UTF-8"));
// System.out.println(fileItem.getFieldName() + "," + fileItem.getString("UTF-8"));
} else {
// 是文件上传项
// 获得有效文件名
filename = fileItem.getName().substring(fileItem.getName().lastIndexOf("\\"));
// 把文件存入指定位置
// fileItem.write(new File("d:/Upload/" + filename));
//
result.getFileMap().put(filename, fileItem);
}
}
} catch (FileUploadException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}
正在回答 回答被采纳积分+1
- 参与学习 人
- 提交作业 1088 份
- 解答问题 10204 个
如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星