java - 使用 Apache commons FileUpload

标签 java jsp upload apache-commons-fileupload

这根本行不通。问题是我的了解不够,甚至不知道应该发生什么。我无法调试这段代码。我想将上传存储到临时文件夹“temp”,然后将它们移动到“applet”。请帮忙? servlet 显然正在被访问,但我找不到上传的文件...提前致谢。

表单(使用 scriptlet 创建 - 如果可能会导致问题,我将其放在这里):

<%
out.write("<p>Upload a new game:</p>");
                    out.write("<form name=\"uploadForm\" action=\"game.jsp\" "
                    + "method=\"POST\" enctype=\"multipart/form-data\">"
                    + "<input type=\"file\" name=\"uploadSelect\" value=\"\" width=\"20\" />"
                    + "<br><input type=\"submit\" value=\"Submit\" name=\"uploadSubmitButton\" "
                    + "onclick = \"submitToServlet2('UploadGameServlet');\">"        
                    + "</form>");
 %>

调用此 javascript:

function submitToServlet2(newAction)
    {
       document.uploadForm.action = newAction;
    }

这又进入 servlet(完整包含代码,因为可能隐藏了一些重要元素)

package org.project;

import java.io.*;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
// import servlet stuff
import org.apache.commons.fileupload.*;


public class UploadGameServlet extends HttpServlet {

/** 
* Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
* @param request servlet request
* @param response servlet response
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");

    if (ServletFileUpload.isMultipartContent(request))
    {
        try 
        {
            // Create a factory for disk-based file items
            FileItemFactory factory = new DiskFileItemFactory();

            // Create a new file upload handler
            ServletFileUpload upload = new ServletFileUpload(factory);

            // Parse the request
            List items = upload.parseRequest(request); /* FileItem */

            File repositoryPath = new File("\\temp");
            DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
            diskFileItemFactory.setRepository(repositoryPath);

            Iterator iter = items.iterator();
            while (iter.hasNext()) 
            {
                FileItem item = (FileItem) iter.next();
                File uploadedFile = new File("\\applets");
                item.write(uploadedFile);
            }            
        }
        catch (FileUploadException ex) 
        {
            Logger.getLogger(UploadGameServlet.class.getName()).log(Level.SEVERE, null, ex);
        }
        catch (Exception ex) 
        {
            Logger.getLogger(UploadGameServlet.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    PrintWriter out = response.getWriter();
    try {
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Servlet UploadGameServlet</title>");  
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>Servlet UploadGameServlet at " + request.getContextPath () + "</h1>");
        out.println("</body>");
        out.println("</html>");
    } finally { 
        out.close();
    }
} 

}

最佳答案

File repositoryPath = new File("\\temp");
File uploadedFile = new File("\\applets");

通过尝试在没有任何类型的前导路径或绝对路径的情况下访问这些文件,您正在尝试写入当前目录下名为 tempapplets 的文件(而不是目录)。工作目录。在应用服务器中,当前工作目录通常是 bin 文件夹(取决于您使用的应用服务器等)。

一些建议:

  1. 使用绝对路径(最好存储在 web.xml 或属性文件中)来引用要将文件保存到的目录。
  2. 您必须指定要写入的文件的名称,您可能希望为每个请求创建某种随机/唯一的名称。
  3. 节省一些击键时间并使用成员变量而不是所有 Logger.getLogger(UploadGameServlet.class.getName()) 引用!
  4. 添加一些调试,尤其是查看数据写入的位置 - 例如,记录 repositoryPath.getAbsolutePath() 的结果。

关于java - 使用 Apache commons FileUpload,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/226503/

相关文章:

image - html5图片上传

java - 什么必须是 Java 中空对象的哈希码?

java - 不支持请求方法 'POST'

java - 关于计时器实用程序

javascript - 使用 javascript 执行 Webdav PROPFIND 请求

javascript - 如何对齐div元素?

c# - 从 FTP 上传文件和下载文件

java - 使用 TripleDES 加密时将初始化 vector (IV) 附加到加密字节

java - 在jsp页面中调用ajax时加载覆盖

php - 多次上传和调整 class.upload.php