简体   繁体   English

无法使用jsp将文件上传到服务器

[英]not able to upload file into server using jsp

I'm trying to develop a Java web application wherein I need to upload files into the server. 我正在尝试开发一个Java Web应用程序,我需要将文件上传到服务器。 I am using Xampp tomcat server which is integrated into eclipse application. 我正在使用Xampp tomcat服务器,它集成到eclipse应用程序中。 Upon selecting the file to upload, I'm getting File Upload failed status message in the next page. 选择要上传的文件后,我将在下一页中收到“ 文件上载失败”状态消息。 This is my code 这是我的代码

fileUpload.jsp fileUpload.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
        <title>FileUpload</title>
    </head>
    <body>
        <form  action="MsgProcessorServlet" method="post" enctype="multipart/form-data" id="uploadForm">
            <input type="file" name="file"/>
            <input type="hidden" name="formType" value="uploadXML"/>
        </form>
        <p>
            <button type="submit" form="uploadForm" id="Upload">Upload</button>
        </p>
    </body>
</html>

MsgProcessorServlet.java MsgProcessorServlet.java

package com.servlet;

import java.io.IOException;
import java.util.List;
import java.io.File;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

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;

/**
 * Servlet implementation class MsgProcessorServlet
 */
@WebServlet("/MsgProcessorServlet")
@MultipartConfig
public class MsgProcessorServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public MsgProcessorServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        System.out.println(request.getParameter("formType"));
        if(request.getParameter("formType").equals("buildNew")) {
            request.setAttribute("message", "Files generated successfully");
            RequestDispatcher req = request.getRequestDispatcher("buildNewResult.jsp");
            req.forward(request, response);
        }
        else if(request.getParameter("formType").equals("uploadXML")) {
            request.setAttribute("message", "File Upload failed");
            if(ServletFileUpload.isMultipartContent(request)) {
                System.out.println("came here1");
                List<FileItem> multiparts = null;
                try {
                    DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
                    diskFileItemFactory.setSizeThreshold(5 * 1024 * 1024);

                    ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);
                    servletFileUpload.setSizeMax(5 * 1024 * 1024);

                    multiparts = servletFileUpload.parseRequest(request);
                } catch (FileUploadException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                System.out.print("multiParts size: ");
                System.out.println(multiparts.size());
                for(FileItem item : multiparts) {
                    System.out.println("came here2");
                    if(!item.isFormField()) {
                        String fileName = new File(item.getName()).getName();
                        System.out.println(fileName);
                        try {
                            request.setAttribute("message", "File Uploaded successfully");
                            item.write(new File("./" + fileName));
                        } catch (Exception e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }
                }
            }

            RequestDispatcher req = request.getRequestDispatcher("fileUploadResult.jsp");
            req.forward(request, response);
        }
    }

}

The multipleParts list of type FileItem is not getting populated upon calling parseRequest method of ServletFileUpload . 在调用ServletFileUpload的 parseRequest方法时,不会填充FileItem类型的multipleParts列表。

Try this. 尝试这个。 Working code. 工作代码。

Fileupload.java Fileupload.java

import java.io.File;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

/**
 * Servlet to handle File upload request from Client
 * @author Javin Paul
 */
public class Fileupload extends HttpServlet {
    private final String UPLOAD_DIRECTORY = "C:/uploads";

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        //process only if its multipart content
        if(ServletFileUpload.isMultipartContent(request)){
            try {
                List<FileItem> multiparts = new ServletFileUpload(
                                         new DiskFileItemFactory()).parseRequest(request);

                for(FileItem item : multiparts){
                    if(!item.isFormField()){
                        String name = new File(item.getName()).getName();
                        item.write( new File(UPLOAD_DIRECTORY + File.separator + name));
                    }
                }

               //File uploaded successfully
               request.setAttribute("message", "File Uploaded Successfully");
            } catch (Exception ex) {
               request.setAttribute("message", "File Upload Failed due to " + ex);
            }          

        }else{
            request.setAttribute("message",
                                 "Sorry this Servlet only handles file upload request");
        }

        request.getRequestDispatcher(/* redirect according to your need. */).forward(request, response); 

    }

}

Index.jsp 的index.jsp

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>File Upload</title>
    </head>

    <body> 
        <div>
            <h3> Choose File to Upload in Server </h3>
            <form action="Fileupload" method="post" enctype="multipart/form-data">
                <input type="file" name="file" />
                <input type="submit" value="upload" />
            </form>          
        </div>

    </body>
</html>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM