【问题标题】:Servlet Upload FIle via PostServlet 通过 Post 上传文件
【发布时间】:2013-03-20 19:05:25
【问题描述】:

我正在开发一个使用 HTTP 请求将数据从一台服务器发送到另一台服务器的应用程序。一切都适用于字符串,但我不知道如何发送文件(文件从一台服务器上传到另一台服务器)。

我查看了一些示例,但我还需要能够随文件一起发送字符串(文件 ID)。

请求是从该类的 POST 方法中的 Java 类发送的。是这样的:客户端向存储服务器发送带有 ID 的文件的上传请求。然后,该存储服务器将该文件上传到另一个存储服务器......因此从第一个服务器到另一个服务器的 POST 请求是从该服务器的 POST 方法发送的。

非常感谢任何正确方向的示例代码或链接。

【问题讨论】:

  • 这是通过网页中的表单完成的。我没有表格或类似的东西。
  • 您需要客户端、服务器端还是两者兼而有之?
  • 您可以使用 HttpClient 使用 post 请求传输文件
  • @Pazvanti 抱歉,您的意思是如何处理上传服务器端-对于客户端,您可能想查看Apache Commons HttpClient-尝试查看examples-尤其是多部分实体一(最后一个)应该做一些类似于你正在寻找的事情。

标签: java servlets


【解决方案1】:

找到了tutorial,了解如何使用 HttpClient 发送多部分数据。看看

【讨论】:

    【解决方案2】:

    CommonsFileUpload 包可以轻松地为您的 servlet 和 Web 应用程序添加强大的、高性能的文件上传功能。

    FileUpload 解析符合 RFC 1867“HTML 中基于表单的文件上传”的 HTTP 请求。也就是说,如果使用 POST 方法提交 HTTP 请求,并且内容类型为“multipart/form-data”,则 FileUpload 可以解析该请求,并以调用者易于使用的方式提供结果,提到here.

    this 链接可以为您提供更多帮助。

    既然你说-

    “我还需要能够发送一个字符串(文件 ID)以及 文件”

    您必须解析 Http 请求并检查 FileItem 是否为表单字段(字符串/文本 - 在您的情况下为文件 ID) 并进行相应的处理。

    这里是多部分内容请求的示例代码 -

    boolean isMultipart = ServletFileUpload.isMultipartContent(request);
            FileItemFactory factory = new DiskFileItemFactory();
            FileItem item=null;
            ServletFileUpload servletFileUpload = new ServletFileUpload(factory);
            servletFileUpload.setSizeMax(-1);
    
            List items =null;
            if (isMultipart) {  
                try 
                {
                    items = servletFileUpload.parseRequest(request);
                    Iterator iter = items.iterator();
                    while (iter.hasNext()) {
                        item = (FileItem) iter.next();                  
                        if (item.isFormField()) 
                        {
    //get your file Id from element to match with item.getFieldName() and do whatever you want
    }
    else if ( !item.isFormField() ){
    //save your file here
    }
    

    希望对你有所帮助。

    【讨论】:

    • @NickJ - 我已经在我的回答(commons-fileupload 的链接)中提到它实际上说它在那里描述;-) 其余的我试图自己解释,我真的希望这对他会有帮助。
    • 嗨!回复晚了,请原谅。我会研究你描述的方法。乍一看,这似乎是我想要的。我会跟上你的:)
    • 我查看了您指定的代码和页面。但我找不到如何形成我发送的请求。您发送的代码可能非常好,但遗憾的是我不知道如何形成来自 servletA(发送文件)的请求。
    • 很难通过将文件从一个“存储服务器”的 post 方法上传到另一个“存储服务器”来预测您是如何发送请求的。您可以发布您的代码以获得更好的响应吗?
    【解决方案3】:

    【讨论】:

      猜你喜欢
      • 2011-07-15
      • 2013-11-29
      • 2015-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多