簡體   English   中英

如何使用multipart / form-data在服務器中上傳文件?

[英]how to upload a file in server using multipart/form-data?

我已經用jsp編寫了一個程序,可以將文件上傳到在webcontent內創建的名為images的文件夾中,但是我的文件沒有被上傳。 請需要幫助。

<form action="upload_images_result.jsp" method="post">
    <div align="left">
        Select a file: <input type="file" name="file" size="50"
            enctype="multipart/form-data" placeholder="Upload Your Image" />
    </div>
    <br>
    <div>
        <input type="submit" value="Upload File" />
    </div>
</form>

upload_images_result.jsp

<%
File file;
int maxFileSize = 5000 * 1024;
int maxMemSize = 5000 * 1024;
//ServletContext context = pageContext.getServletContext();
String filePath = "D:\\Students_Server\\WebContent\\Images";
// Verify the content type
String contentType = request.getContentType();
if ((contentType.indexOf("multipart/form-data") >= 0)) {

    DiskFileItemFactory factory = new DiskFileItemFactory();
    // maximum size that will be stored in memory
    factory.setSizeThreshold(maxMemSize);
    // Location to save data that is larger than maxMemSize.
    factory.setRepository(new File(               
    filePath "));
    // Create a new file upload handler
    ServletFileUpload upload = new ServletFileUpload(factory);
    // maximum file size to be uploaded.
    upload.setSizeMax(maxFileSize);
    try {
        // Parse the request to get file items.
        List fileItems = upload.parseRequest(request);
        // Process the uploaded file items
        Iterator i = fileItems.iterator();

        out.println("<html>");
        out.println("<head>");
        out.println("<title>JSP File upload</title>");
        out.println("</head>");
        out.println("<body>");
        while (i.hasNext()) {
            FileItem fi = (FileItem) i.next();
            if (!fi.isFormField()) {
                // Get the uploaded file parameters
                String fieldName = fi.getFieldName();
                String fileName = fi.getName();
                boolean isInMemory = fi.isInMemory();
                long sizeInBytes = fi.getSize();
                // Write the file
                if (fileName.lastIndexOf("\\") >= 0) {
                    file = new File(filePath +
               fileName.substring(fileName.lastIndexOf("\\")));
                } else {
                    file = new File(filePath + 
              fileName.substring(fileName.lastIndexOf("\\") + 1));
                }
                fi.write(file);
                out.println("Uploaded Filename: " + filePath + fileName + "
                <br>");
            }
        }
        out.println("</body>");
        out.println("</html>");
    } catch (Exception ex) {
        System.out.println(ex);
    }
} else {
    out.println("<html>");
    out.println("<head>");
    out.println("<title>Servlet upload</title>");
    out.println("</head>");
    out.println("<body>");
    out.println("<p>No file uploaded</p>");
    out.println("</body>");
    out.println("</html>");
}
%>

輸出被打印為“沒有文件上傳”

謝謝

您在html中使用了錯誤的屬性。 屬性enctype =“ multipart / form-data”僅在標簽形式中使用 ,如下所示。

<form action="upload_images_result.jsp"
      method="post" 
      enctype="multipart/form-data">
</form>

或者,您可以在標記輸入中使用type =“ submit” ,如下所示。

<form action="upload_images_result.jsp" 
      method="post">
  <input type="submit" 
         formenctype="multipart/form-data" 
         value="Submit as Multipart/form-data"/>
</form>

發出POST請求時,必須以某種方式對構成請求主體的數據進行編碼。

HTML表單提供了三種編碼方法。

  • application / x-www-form-urlencoded(默認)
  • 多部分/表單數據
  • 文字/純文字

當表單包含任何<input type="file">元素時,請使用enctype=multipart/form-data

所以用

<form action="upload_images_result.jsp" method="post" enctype="multipart/form-data">
    <div align="left">
        Select a file: <input type="file" name="file" size="50"
            enctype="multipart/form-data" placeholder="Upload Your Image" />
    </div>
    <br>
    <div>
        <input type="submit" value="Upload File" />
    </div>
</form>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM