簡體   English   中英

Servlet上傳java.io.FileNotFoundException:

[英]Servlet Upload java.io.FileNotFoundException:

我正在嘗試使用servlet創建上傳表單,到目前為止我有以下內容;

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    boolean isMultipart = ServletFileUpload.isMultipartContent(request);

    if (isMultipart) {
        FileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload upload = new ServletFileUpload(factory);

        try {
            List items = upload.parseRequest(request);
            Iterator iterator = items.iterator();
            while (iterator.hasNext()) {
                FileItem item = (FileItem) iterator.next();

                if (!item.isFormField()) {
                    String fileName = item.getName();

                    String root = getServletContext().getRealPath("");
                    File path = new File(root + "/uploads");

                    if (!path.exists()) {
                        boolean status = path.mkdirs();

                    }

                    File uploadedFile = new File(path + "/" + fileName);
                    System.out.println(uploadedFile.getAbsolutePath());
                    item.write(uploadedFile);

                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

它似乎上傳文件很好,但它總是拋出java.io.FileNotFoundException:我做錯了什么?

錯誤:

    /Applications/Tomcat/apache-tomcat-6.0.35/wtpwebapps/work/uploads/texsxxdddst.xml
/Applications/Tomcat/apache-tomcat-6.0.35/wtpwebapps/work/uploads
java.io.FileNotFoundException: /Applications/Tomcat/apache-tomcat-6.0.35/wtpwebapps/work/uploads (No such file or directory)
    at java.io.FileOutputStream.open(Native Method)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:194)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:145)
    at org.apache.commons.fileupload.disk.DiskFileItem.write(DiskFileItem.java:426)
    at servlets.uploadServlet.doPost(uploadServlet.java:48)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Thread.java:680)

我的猜測是你要寫文件的目錄是寫保護的,或者你沒有權限在那里寫。 您不應該將這些文件寫在此目錄中,因為如果取消部署或重新部署Web應用程序,它將被刪除。 考慮Tomcat的目錄是由Tomcat負責的。

選擇要在其中存儲上載的Tomcat之外的目錄,並使用包含此路徑的參數配置webapp。 在代碼中使用此參數來獲取路徑並寫入上載的文件。

請閱讀http://commons.apache.org/fileupload/apidocs/org/apache/commons/fileupload/disk/DiskFileItemFactory.html上的文檔:

如果未另行配置,則默認配置值如下:

  • 大小閾值為10KB。
  • 存儲庫是System.getProperty(“java.io.tmpdir”)返回的系統默認臨時目錄。

您需要查看System.getProperty("java.io.tmpdir") ,而不是您當前使用的當前工作目錄。

否則,可能更喜歡使用重載的DiskFileItemFactory構造函數來明確指定文件存儲的位置。

JB的答案同樣有效。 即使您更正了我在此處提到的內容,您仍然需要確保您運行Web應用程序的進程/用戶對您選擇的任何目錄具有適當的權限。

暫無
暫無

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

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