簡體   English   中英

如何使用駱駝 http 組件將文件上傳到運行在 apache tomcat 服務器上的應用程序?

[英]How can I use camel http compponent to upload a file to an application running on apache tomcat server?

我的要求是創建一個文件到 http 路由,以使用 http 組件將文件從文件組件上傳到 http 服務器。 我也想知道這個駱駝 http 組件是如何工作的。 我們可以使用camel http組件將文件上傳到http服務器嗎?

根據您的 HTTP 服務器,您將不得不采取不同的方法。 如果您有給定的情況(Jetty 服務器),您可以使用 HTTP4 組件上傳文件:

from("jetty:http://localhost:8081/upload?httpMethodRestrict=PUT")
    .log("Uploaded ${body}");

from("file:src/data/jetty?delay=5000&noop=true")      
    .setHeader(Exchange.HTTP_METHOD, constant(HttpMethods.PUT))
    .to("http4://localhost:8081/upload");

然而,如果服務器只接受多部分請求,你將不得不變得更加狡猾,例如使用這樣的東西:

from("file:src/data/jersey?delay=5000&noop=true")
    .process(new Processor() {
        public void process(Exchange exchange) throws Exception {
            MultipartEntityBuilder multipartEntityBuilder = 
                MultipartEntityBuilder.create();
            multipartEntityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
            multipartEntityBuilder.addPart("username", username);
            multipartEntityBuilder.addPart("password", password);

            String filename = (String) 
                exchange.getIn().getHeader(Exchange.FILE_NAME);
            File file = exchange.getIn().getBody(File.class);
            multipartEntityBuilder.addPart("upload",
                new FileBody(file, MULTIPART_FORM_DATA, filename));

            exchange.getIn().setBody(multipartEntityBuilder.build());
        }
    })
    .to("http4://localhost:8080/restwb/upload");

這取決於您希望如何提交文件的內容。 例如,假設您在 CSV 中有許多行需要發布到 HTML 表單。 您可能會構建一條路線,例如:

  • From:從給定路徑獲取文件
  • To:將文件中的數據轉換為適當的 HTTP 標頭(一個簡單的 POJO 可以很好地做到這一點)
  • 收件人:通過 HTTP 上的 POST 提交此內容

如果您想上傳整個文件,您可能會轉而查看也可以由組件執行的 HTTP PUT。 您可能希望將文件設置為消息的附件,然后使用 PUT 將其發送到 HTTP 組件。

組件文檔在http://camel.apache.org/http4.html提供了更好的概述 - 但您最大的限制似乎是文件組件使用者可以做什么以及它應該輪詢什么 - 請參閱http://camel .apache.org/file2.html了解詳情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM