Hi,
On 08/03/13 11:07, jamalissimo wrote:
Hi,
I will describe what steps I need to do and what I have done. This route
servers as file uploader but not in the right sense of the word. It does not
upload file via stream but I need to send the file as part of post request
What I need to do:
1. Get QueryParams from given url e.g.
http://localhost:1555/cxf/127.0.0.1/uploadFile?port=443&user=myuser&password=mypassword&file=/path/to/myfile.txt
2. Set appropriate properties for passing data through the route
3. Pass this data to method where I set MultipartEntity and send the POST
request
--
Yesterday I was able to make the consumer work as you saw at
http://cxf.547215.n5.nabble.com/MultipartBody-with-PathParam-and-QueryParam-td5724291.html#a5724293
<http://cxf.547215.n5.nabble.com/MultipartBody-with-PathParam-and-QueryParam-td5724291.html#a5724293>
The tricky part is how to send different type of data then only multipart.
For now it works with this hard-coded data:
CXF:
--------------------------------------------------------------------------------------
@POST
@Path("/upload")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.APPLICATION_JSON)
public Response uploadFile(
@Multipart(value = "session_id") String sessionId,
@Multipart(value = "action") String action
){
return null;
}
JAVA:
--------------------------------------------------------------------------------------
public void sendPost(Exchange exchange) throws IOException {
String pathToUploader =
"https://myserver.com/service/upload.php";
String session_id = "0kk1sobmbuforgjamj10470a23";
String action = "A";
File myfile = new File("/path/to/myfile.txt");
HttpClient client = new DefaultHttpClient();
client.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION,
HttpVersion.HTTP_1_1);
HttpPost post = new HttpPost(pathToUploader);
MultipartEntity entity = new MultipartEntity(
HttpMultipartMode.BROWSER_COMPATIBLE );
// For File parameters
entity.addPart("myfile", new FileBody((( File ) myfile),
"application/octet-stream" ));
// For usual String parameters
entity.addPart("session_id", new StringBody(session_id,
"text/plain",
Charset.forName( "UTF-8" )));
entity.addPart("action", new StringBody(action,
"text/plain",
Charset.forName( "UTF-8" )));
post.setEntity( entity );
}
This will send the correct http request via POST method and I can see file
uploaded on my server.
To add additional parameters I tried to do something like this:
@POST
@Path("/upload")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.APPLICATION_JSON)
public Response uploadFile(
@PathParam("host") String host,
@QueryParam("port") String port,
@Multipart(value = "session_id") String sessionId,
@Multipart(value = "action") String action
){
return null;
}
which actually works, I can get data via MessageContentsList, set properties
and pass them to method sendPost().
But this is the point where sending of multipart POST request stops working.
I can see that everything is set correctly, but the request is sent with
incorrect data or format and I can't see the uploaded file.
Are you saying that as soon as you add @PathParam("host") and
@QueryParam("port") then the sendPost() stops working ?
Cheers, Sergey
-Br, Roman
--
View this message in context:
http://camel.465427.n5.nabble.com/Send-file-via-POST-request-tp5728674p5728817.html
Sent from the Camel - Users mailing list archive at Nabble.com.