导入功能实现失败....

导入功能实现失败....

首先是导入失败的问题,点击导入后显示报错信息,并如图显示。

其次是这个文件不是存放在upload文件下,而是直接存在d盘且文件名为uploaodxxxxxx,这俩问题怎么解决呢

http://img1.sycdn.imooc.com//climg/5c1c639200015b7914400747.jpg

http://img1.sycdn.imooc.com//climg/5c1c63920001a22319200662.jpg

http://img1.sycdn.imooc.com//climg/5c1c63920001d7d108290222.jpg


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

3回答
提问者 慕前端6228120 2018-12-21 14:27:51
Excelservice.java:
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.ImportExcelParamDto;
import org.imooc.dto.ImportExcelResultDto;
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 ImportExcelResultDto imp(ImportExcelParamDto dto){
        ImportExcelResultDto result=new ImportExcelResultDto();
        result.setTitle(dto.getTitle());
        List<Student> studentlist=new ArrayList<>();
        result.setStudentList(studentlist);
        String filename=FileUtil.save(dto.getExcel(),FileUtil.savepath());
        if(filename!=null){
            Workbook workbook = null;
            try {
                 workbook=WorkbookFactory.create(new File(FileUtil.savepath()+ 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();
                    studentlist.add(student);
                    student.setName(row.getCell(0).getStringCellValue());
                    student.setAge((int)row.getCell(1).getNumericCellValue());
                    student.setTime(row.getCell(2).getDateCellValue());
                }
            } catch (Exception e) {
                result.setMsg("解析Excel失败!");
                e.printStackTrace();
            }
            finally {
                if(workbook != null){
                    try {
                        workbook.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }

            }
        }
        return result;
    }
}


importexcelservlet.java:
package org.imooc.servlet;

import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.imooc.dto.ImportExcelParamDto;
import org.imooc.dto.ImportExcelResultDto;
import org.imooc.dto.ParamDto;
import org.imooc.service.ExcelService;
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)){
           ParamDto dto=RequestUtil.parseParam(req);
           ImportExcelParamDto paramdto=new ImportExcelParamDto();
           paramdto.setTitle(dto.getParamMap().get("title"));
           paramdto.setExcel(dto.getFileMap().get("excel"));
           ExcelService service=new ExcelService();
           ImportExcelResultDto resultDto=service.imp(paramdto);
           req.setAttribute("result",resultDto);
        }
        else{

        }
        req.getRequestDispatcher("/WEB-INF/jsp/importExcelResult.jsp").forward(req,resp);
    }
}


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) {
                if(fileItem.isFormField()) {
                    result.getParamMap().put(fileItem.getFieldName(),fileItem.getString("UTF-8"));
                } else {
                    result.getFileMap().put(fileItem.getFieldName(),fileItem);

                }

            }
        } catch (FileUploadException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }
}



fileutil;
package org.imooc.util;

import org.apache.commons.fileupload.FileItem;

import java.io.File;

public class FileUtil {
    //上传文件的保存路径
    public static final String savepath(){
        return "d:/upload/";
    }
    //保存上传的文件
    public static String save(FileItem fileItem, String path){
        String fileName=System.currentTimeMillis()+"_"+fileItem.getName();

        try {
            fileItem.write(new File(path+fileName));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return fileName;

    }
}
这四个文件行嘛,功能实现主要是靠这四个吧


  • 试了同学的代码,没发现问题,问一下同学的控制台有报错吗?如果有报错,建议同学将报错信息贴一下。祝:学习愉快~
    2018-12-21 17:07:46
  • 提问者 慕前端6228120 回复 好帮手慕阿满 #2
    老师,是这样的,我把源文件里日期的内容都去掉后,问题就解决了,当然网页上也就没有日期了。所以在excel文件里日期需要注意什么格式吗
    2018-12-21 17:20:53
  • 好帮手慕阿满 回复 提问者 慕前端6228120 #3
    同学你好,excel中的日期是采用2016/2/20这种形式的。同学可以下载教辅区中的项目静态资源,其中有03和07版的需要导入的excel表格,同学导入那个表格试试。祝:学习愉快~
    2018-12-21 18:17:43
好帮手慕阿满 2018-12-21 14:17:42

建议同学将导入的代码贴上来,方便我们帮你查看问题。贴代码时选择我要回答,选择代码语言。祝:学习愉快~

提问者 慕前端6228120 2018-12-21 12:05:31

..........经过下一课的学习,问题二已经没问题了

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
从网页搭建入门Java Web2018版
  • 参与学习           人
  • 提交作业       1088    份
  • 解答问题       10204    个

如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!

了解课程
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师