【问题标题】:how to upload file to http remote server using java? [duplicate]如何使用Java将文件上传到HTTP远程服务器? [复制]
【发布时间】:2012-05-29 22:52:20
【问题描述】:

我需要使用 java 将图像和 txt 文件从我的应用程序上传到远程服务器(只是 http 没有 ftp)。我的应用程序在 jsf 框架中。我搜索但没有找到合适的东西。 有人可以指导我吗? 事实上,我应该将文件上传到远程服务器的特殊文件夹。 我有两个具有共享路径的应用程序来上传文件,因此为了访问这些文件,我决定将共享文件(例如图像和文本)上传到第三个服务器。第一个应用程序应该将文件上传到这个远程服务器,第二个应用程序应该从中读取它们。 所以我在这个解决方案中最难的部分是使用 http 将文件上传到第三台服务器(实际上是远程服务器)。

【问题讨论】:

  • 所有建议 commons fileupload 发送文件的人都是错误。它旨在解析另一方的 multipart/form-data 请求,而不是创建和发送 multipart/form-data 请求。
  • 也许这个问题应该更清楚。不要指望这个模糊的问题得到准确的答案!
  • 我有两个共享路径的应用程序来上传文件,所以为了访问这些文件,我决定将共享文件(如图像和文本)上传到第三个服务器。第一个应用程序应该将文件上传到这个远程服务器,第二个应用程序应该从中读取它们。所以我在这个解决方案中最难的部分是使用 http 将文件上传到第三台服务器(实际上是远程服务器)。
  • 首先考虑以下几点: 1. 你的“第三台服务器”上是否运行着一个http服务器? 2. 那里可以上传自定义代码吗?如果第一个问题的答案是肯定的,那么下面提供的答案将起作用。否则,首先你必须安装 tomcat、glassfish 或其他一些 http 服务器,然后按你的方式工作。

标签: java http jsf file-upload remote-server


【解决方案1】:

要将文件上传到特定文件夹,您的服务器 API 必须支持。

服务器端用于接收上传的文件,可以使用http://commons.apache.org/fileupload/

客户端发送文件上传请求,可以使用https://hc.apache.org/httpcomponents-client-ga/index.html

【讨论】:

  • 远程服务器上的特定文件夹。我的应用程序在我的服务器上运行,文件主机不是我的应用程序运行的地方。
  • 正如我所说,远程服务器/文件主机必须提供 API 用于通过 HTTP 上传时指定远程目标
【解决方案2】:

看看 apache commons-fileupload。您可以找到示例代码here

【讨论】:

    【解决方案3】:

    使用以下代码:

            byte[] data = bos.toByteArray();//convert ur file into byte[]
            HttpClient httpClient = new DefaultHttpClient();//Client
            HttpPost postRequest = new HttpPost(YOUR_SERVER_URL);//Post Request to specified URL
            ByteArrayBody bab = new ByteArrayBody(data, "a.txt");
            MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);// Multipart data
            reqEntity.addPart("uploadingFile", bab); //adding data to request entity
            postRequest.setEntity(reqEntity);//adding request entity to post request
            HttpResponse response = httpClient.execute(postRequest); 
    

    【讨论】:

    • 我应该在哪里添加我的远程服务器 url?在您的代码中,什么是“a.txt”?你能帮我解释一下吗?
    • 在 YOUR_SERVER_URL 中添加你的服务器 url...a.txt 是我发送给 2 个服务器的文件
    • 我使用了你的代码,但没有任何移动,也没有抛出异常。你能指导我吗?我在您上面的代码中没有更改任何内容。谢谢
    【解决方案4】:

    根据您的要求,您需要发送多个图像和文本文件。所以 HTTP 多部分文件上传似乎是一个合适的解决方案。你可以从here获得更多信息。

    【讨论】:

      【解决方案5】:

      你可以使用HttpClient。

      使用POST作为方法发送文件。

      【讨论】:

        【解决方案6】:

        制作

        @Autowired
        ServletContext c;
        

        或取对象

        byte[] bytes = file.getBytes();
        
        String UPLOAD_FOLDEdR=c.getRealPath("/images");  
        Path path = Paths.get(UPLOAD_FOLDEdR +"/"+ file.getOriginalFilename());
        Files.write(path, bytes);
        System.out.println(path);
        String Pic_Name =file.getOriginalFilename();
        

        【讨论】:

        • 您能否编辑您的答案以使其有意义?目前代码很难阅读,而且还不清楚这如何解决相关问题。请更好地解释你的答案。
        猜你喜欢
        • 1970-01-01
        • 2018-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多