2008-10-22 84 views
0

这是行不通的。问题是我不知道甚至不知道应该发生什么。我无法调试此代码。我想将上传文件存储到临时文件夹“temp”,然后将它们移动到“小程序”。请帮忙?该servlet显然是被访问,但我找不到上传的文件...在此先感谢。使用Apache commons FileUpload

表(这是使用脚本小程序创建的 - 我把这个在这里,如果可能导致问题):

<% 
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(); 
    } 
} 

}

+0

你不能调试servlet代码吗?你确定servlet正在被访问吗?我不知道是否需要在submitToServlet2函数中返回** true **以提交请求。 – 2008-10-22 16:15:07

+0

是的,服务器输出一个标题...所以我知道它至少得到输出线。我如何调试servlet代码? – pypmannetjies 2008-10-22 16:23:56

回答

6
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()的结果。
相关问题