I have tried your suggestion and it works. Thanks!
Shing On Monday, 16 June 2014, 3:10, Willem Jiang <[email protected]> wrote: camel-http component support to send RequestEntity by default. If you want to send a file as a multi part form, you can just put the MultipartRequestEntity instance into the message body, just like this. private RequestEntity createMultipartRequestEntity() throws Exception { File file = new File("src/main/resources/META-INF/NOTICE.txt"); Part[] parts = {new StringPart("comment", "A binary file of some kind"), new FilePart(file.getName(), file)}; return new MultipartRequestEntity(parts, new HttpMethodParams()); } @Test public void testSendMultiPartFormFromCamelHttpComponnent() throws Exception { String result = template.requestBody("http://localhost:" + getPort() + "/test", createMultipartRequestEntity(), String.class); assertEquals("Get a wrong result", "A binary file of some kind", result); } -- Willem Jiang Red Hat, Inc. Web: http://www.redhat.com Blog: http://willemjiang.blogspot.com (English) http://jnn.iteye.com (Chinese) Twitter: willemjiang Weibo: 姜宁willem On June 15, 2014 at 5:16:22 PM, Shing Hing Man ([email protected]) wrote: > Thanks for the link ! > > > I found an example in > > > https://github.com/apache/camel/blob/master/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpSendFileTest.java > > > > I have noticed from the example > > > https://github.com/apache/camel/blob/master/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/MultiPartFormTest.java > > > that, Apache HttpClient is used to send a MultiPartForm. > > It looks as though one can not send a MultiPartForm (with more than one body > parts) using > Camel ProducerTemplate. > > > > Shing > > > > > On Friday, 13 June 2014, 7:16, Claus Ibsen wrote: > > > > Hi > > A good idea is to check the unit tests of the components. Maybe you > can find some sample code there. > > For http try look in > https://github.com/apache/camel/tree/master/components/camel-http/src/test/java/org/apache/camel/component/http > > > and > https://github.com/apache/camel/tree/master/components/camel-jetty/src/test/java/org/apache/camel/component/jetty > > > > On Thu, Jun 12, 2014 at 9:07 PM, Shing Hing Man > wrote: > > Hi, > > > > I tried to use producerTemplate to send a http post with an attached file. > > > > > > > > ProducerTemplate template = context.createProducerTemplate(); > > > > Exchange exchange = template.send("http://localhost:8080/file", > > new Processor() { > > public void process(Exchange exchange) throws Exception { > > > > Message msgIn = exchange.getIn(); > > String userHome=System.getProperty("user.home"); > > File file = new File(userHome + "/test.txt"); > > DataHandler dh = new DataHandler(new FileDataSource(file)); > > > > msgIn.addAttachment("myFile",dh); > > msgIn.setHeader(Exchange.CONTENT_TYPE, "multipart/form-data"); > > > > msgIn.setHeader(Exchange.HTTP_METHOD, "POST"); > > } > > > > }); > > > > At the server side, I received something like : > > > > > > RequestContext(HttpRequest(POST,http://localhost:8080/file,List(Content-Length: > > > 0, Host: localhost:8080, User-Agent: Jakarta Commons-HttpClient/3.1, > breadcrumbId: > ID-gauss-site-41171-1402599541172-0-1),Empty,HTTP/1.1),Actor[akka://default/temp/$a],) > > > > > The Context type and the attached file seem not to have reached the server. > > > > > > Is the above a correct way to send http post with attachment ? > > > > Thanks in advance for any assistance ! > > > > Shing > > > > -- > Claus Ibsen > ----------------- > Red Hat, Inc. > Email: [email protected] > Twitter: davsclaus > Blog: http://davsclaus.com > Author of Camel in Action: http://www.manning.com/ibsen > hawtio: http://hawt.io/ > fabric8: http://fabric8.io/
