Java 上传文件时出现空指针异常

Java 上传文件时出现空指针异常,java,file-upload,struts2,Java,File Upload,Struts2,您好,从这段代码中,我得到了空指针异常,当我要读取uploadfilename时,我尝试了很多方法来解决这个问题,但这个问题没有解决。有人能帮我解决这个问题吗 public class ImportAction extends ActionSupport implements ServletRequestAware { private static final long serialVersionUID = 1L; private File uploadFile; pr

您好,从这段代码中,我得到了空指针异常,当我要读取uploadfilename时,我尝试了很多方法来解决这个问题,但这个问题没有解决。有人能帮我解决这个问题吗

public class ImportAction extends ActionSupport implements ServletRequestAware {

    private static final long serialVersionUID = 1L;
    private File uploadFile;
    private String uploadfileFileName;
    private String uploadfileContentType;
    private HttpServletRequest servletRequest;

    public String getUploadfileFileName() {
        return uploadfileFileName;
    }

    public void setUploadfileFileName(String uploadfileFileName) {
        this.uploadfileFileName = uploadfileFileName;
    }

    public String getUploadfileContentType() {
        return uploadfileContentType;
    }

    public void setUploadfileContentType(String uploadfileContentType) {
        this.uploadfileContentType = uploadfileContentType;
    }

    public File getUploadFile() {
        return uploadFile;
    }

    public void setUploadFile(File uploadFile) {
        this.uploadFile = uploadFile;
    }
    RegisterDAO dao = new RegisterDAO();

    /**
     *
     * @return
     * @throws
     * Exception
     */
    @SuppressWarnings("unchecked")
    @Override
    public String execute() throws Exception {
        String filePath = servletRequest.getSession().getServletContext().getRealPath("/");
        System.out.println("filepath" + filePath);
        System.out.println("file" + getUploadFile());
        System.out.println("filename" + getUploadfileFileName());
        File fileToCreate = new File(filePath, this.uploadfileFileName);
        try {
            FileUtils.copyFile(this.uploadFile, fileToCreate);
        } catch (IOException e) {
            addActionError(e.getMessage());
        }
        return SUCCESS;


//        Model m = new Model();
//        String result = m.fileimport(uploadFile, uploadfileFileName);
//        String result = m.fileimport();
//        if (result.equals(SUCCESS)) {
//            return SUCCESS;
//        } else {
//            addActionError(getText(result));
//            return "failure";
//        }
    }

    @Override
    public void validate() {
        System.out.println("inside validate of LA");
    }

    @Override
    public void setServletRequest(HttpServletRequest servletRequest) {
        this.servletRequest = servletRequest; //To change body of generated methods, choose Tools | Templates.
    }

我建议尝试从servlet上下文
getResourceAsStream
,而不是使用文件路径。这将适用于WAR文件


你需要考虑的另一个问题是,除了测试用例之外,文件甚至不太可能驻留在服务器上。对于远程用户来说,文件路径没有意义。“上载文件”将发生在不是服务器的机器上。对于这种情况,您的代码不正确。

如果您将应用程序部署为WAR-following,则代码将返回null

String filePath = servletRequest.getSession().getServletContext().getRealPath("/");
这是错误的,请注意其他属性中的小
f
,它应该是
f
,因为文件字段名是
uploadFile

这是有效的:

private File upload;
    private String uploadFileName;
    private String uploadContentType;
这一条也是有效的:

private File uploadFile;
    private String uploadFileFileName;
    private String uploadFileContentType;

不,你不能。只是输入流。您的要求不清楚。可能是重复的,并且已经回答了。您尚未更正变量名。至少读一下我们给你的答案。。。。。。。
private File uploadFile;
    private String uploadFileFileName;
    private String uploadFileContentType;