如何在不使用apache的情况下上传和保存java servlet中的文件?

时间:2009-09-23 08:55:42

标签: java

out.println("<tr><td><FORM ENCTYPE='multipart/form-data'"+
                          "method='POST' action='ProcessUpload' ></td>"+
                          "<td><INPUT TYPE='file' NAME='mptest'></td>"+
                          "<td><INPUT TYPE='submit' VALUE='upload'></td>"+
                          "</FORM></tr>");

此代码可以帮助我上传文件,但问题是我点击上传后,我无法将上传的文件保存到特定的目录中。任何人都可以给出一些建议吗?

6 个答案:

答案 0 :(得分:2)

上面的代码只是为上传按钮输出HTML。对于表单可能启动的任何上载请求,它不会执行任何操作。

我可以问你为什么不想使用Apache Commons FileUpload?不使用它意味着您需要实施RFC 1867。当实施已经存在时,浪费了大量的时间和精力。

答案 1 :(得分:0)

你必须编写另一个servlet(或一些CGI,jsp ......等)来从请求中检索文件并将其保存到你喜欢的任何地方:

http://www.frontiernet.net/~Imaging/FileUploadServlet.html

答案 2 :(得分:0)

Apache Commons FileUpload是其他人建议的方式。如果你不想出于任何原因使用它,你也可以看看这个类,

http://metatemplate.googlecode.com/svn/trunk/metatemplate/java-app-framework/tomcat-adapter/src/com/oreilly/servlet/MultipartRequest.java

这不如FileUpload强大,但它适用于简单的文件上传。

答案 3 :(得分:0)

如果你想使用Multipart请求,你需要编写processUpload servlet来处理这个问题,例如:

private String fileSavePath;

public void init(){
    fileSavePath = getServletContext().getRealPath("/") + "data";
}   


public void doPost(HttpServletRequest request, HttpServletResponse response)
  throws IOException, ServletException{
    MultipartRequest mpr = new MultipartRequest(request, fileSavePath);
}

而且我真的不会像你的问题那样从servlet输出纯html - 尝试调度到jsp - 如果不需要别的东西就更好,只需使用普通的html。

答案 4 :(得分:0)

COS图书馆http://servlets.com/cos/(不是apache)

答案 5 :(得分:0)

我是第二个mlk的建议,并认为阅读Users Guide to Commons FileUpload将帮助您开始。它将处理接收文件,但您仍然必须告诉它“存储”它的位置。根据您的描述,听起来您希望用户选择“在哪里”存储文件。你必须自己写这部分。

我在servlet中一起攻击了一个快速的lister。所有其他评论都是正确的。在servlet中编写html并不是一个好主意,但这听起来像是一次很好的学习经历。

package somepackage;

import java.io.File;
import java.io.IOException;

import java.io.Writer;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class DirectoryChooserServlet extends HttpServlet {
    public DirectoryChooserServlet() {
        super();
    }

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

        Writer w = response.getWriter();
        w.write("<html><body>");
        String action = request.getParameter("action");
        String directory = request.getParameter("directory");
        String startDirectory = "/private";
        if ("list".equals(action)) {
            startDirectory = directory;
        }
        File dir = new File(startDirectory);
        if (dir != null) {
            w.write("<a href=\"?action=list&directory="+dir.getParentFile().getAbsolutePath()+"\">..</a><br/>");
            for(File f: dir.listFiles()) {
                if(f.isDirectory()) {
                    w.write("<a href=\"?action=list&directory="+f.getAbsolutePath()+"\">" + f.getName() + "</a><br/>");    
                }            
            }
        }
        w.write("</body></html>");
    }
}