Hi Malith, It gives the same result.
Thanks, Supun On Fri, Apr 24, 2015 at 10:41 AM, Malith Munasinghe <[email protected]> wrote: > Links for the above > > [1] > http://stackoverflow.com/questions/10801122/handling-multipart-attachments-in-cxf-apis > > > On Fri, Apr 24, 2015 at 10:40 AM, Malith Munasinghe <[email protected]> > wrote: > >> Hi Supun, >> >> As discussed in [1] for CXF 2.6.x api file uploading using multipart >> content type can be done using Attachement Argument type instead of >> InputStream. Can you try using >> >> @Multipart(value = "file") @NotNull Attachment attachment >> Then use >> >> InputStream inputStream = attcehment.getObject(InputStream.class); >> >> to get the InputStream. >> >> Thank you, >> Regards >> >> >> On Fri, Apr 24, 2015 at 9:26 AM, Supun Sethunga <[email protected]> wrote: >> >>> Hi Malith, >>> >>> Using the latest Chrome/Firefox versions. This isn't working when called >>> from a java-client either. >>> >>> Catch here is, rest of the form data get submitted correctly. AFAIU >>> problem is in the way the file is streamed to the server (the way it gets >>> attached to the request). >>> >>> Thanks, >>> Supun >>> >>> On Fri, Apr 24, 2015 at 9:14 AM, Malith Munasinghe <[email protected]> >>> wrote: >>> >>>> Hi Supun, >>>> >>>> Can you check the browser version of yours ? As of [1] FormData >>>> emulation for older browser (Below Safari 5 / Firefox 4) you might have to >>>> change it to the way mentioned in top Ranked answer. >>>> >>>> [1] >>>> http://stackoverflow.com/questions/5392344/sending-multipart-formdata-with-jquery-ajax >>>> >>>> On Fri, Apr 24, 2015 at 9:02 AM, Supun Sethunga <[email protected]> >>>> wrote: >>>> >>>>> Hi Malith/Thilini, >>>>> >>>>> Thanks for the suggestion. I had tried that. Didn't work :/ >>>>> >>>>> Regards, >>>>> Supun >>>>> >>>>> On Fri, Apr 24, 2015 at 8:45 AM, Thilini Cooray <[email protected]> >>>>> wrote: >>>>> >>>>>> Hi Supun, >>>>>> >>>>>> [1] also suggests to make contentType false. >>>>>> >>>>>> [1] >>>>>> http://stackoverflow.com/questions/12831680/jquery-ajax-multipart-form-data-not-sending-data >>>>>> >>>>>> Thanks. >>>>>> >>>>>> On Fri, Apr 24, 2015 at 8:44 AM, Malith Munasinghe <[email protected]> >>>>>> wrote: >>>>>> >>>>>>> Hi Supun! >>>>>>> >>>>>>> Try Making contentType: false, >>>>>>> >>>>>>> Regards, >>>>>>> Malith. >>>>>>> >>>>>>> On Thu, Apr 23, 2015 at 5:20 PM, Supun Sethunga <[email protected]> >>>>>>> wrote: >>>>>>> >>>>>>>> Hi, >>>>>>>> >>>>>>>> Requirement was to let a user upload a data file from a UI >>>>>>>> (html/jaggery), and the backend which handles file uploading is >>>>>>>> exposed as >>>>>>>> a REST service. Backend service method I wrote looks as follows: >>>>>>>> >>>>>>>> @POST >>>>>>>>> @Produces(MediaType.APPLICATION_JSON) >>>>>>>>> @Consumes(MediaType.MULTIPART_FORM_DATA) >>>>>>>>> public Response uploadDataset(@Multipart("datasetName") String >>>>>>>>> datasetName, >>>>>>>>> @Multipart("version") String >>>>>>>>> version, >>>>>>>>> @Multipart("description") String >>>>>>>>> description, >>>>>>>>> @Multipart("sourceType") String >>>>>>>>> sourceType, >>>>>>>>> @Multipart("destination") String >>>>>>>>> destination, >>>>>>>>> @Multipart("sourcePath") String >>>>>>>>> sourcePath, >>>>>>>>> @Multipart("dataFormat") String >>>>>>>>> dataFormat, >>>>>>>>> @Multipart("file") InputStream >>>>>>>>> inputStream) { >>>>>>>>> . . . >>>>>>>>> . . . >>>>>>>>> } >>>>>>>> >>>>>>>> >>>>>>>> The InputStream is then written to a file at the server side. This >>>>>>>> method works fine when I call this with CURL using: >>>>>>>> >>>>>>>> *curl -X POST -b cookies http://localhost:9763/api/datasets >>>>>>>>> <http://localhost:9763/api/datasets> -H "Authorization: Basic >>>>>>>>> YWRtaW46YWRtaW4=" -H "Content-Type: multipart/form-data" --form >>>>>>>>> datasetName=TestDataset --form version=1.0.0 --form >>>>>>>>> description=TestDescription --form sourceType=file --form >>>>>>>>> destination=file >>>>>>>>> --form dataFormat=CSV --form >>>>>>>>> file=@/home/supun/Supun/MachineLearning/data/IndiansDiabetes.csv >>>>>>>>> --form >>>>>>>>> sourcePath=/temp* >>>>>>>> >>>>>>>> >>>>>>>> Also works fine when I used Chrome's REST client. >>>>>>>> >>>>>>>> However, when I call the same service, using AJAX, the file is >>>>>>>> written with empty content. Follow is the sample snippet. >>>>>>>> >>>>>>>> >>>>>>>>> *var formData = new FormData();* >>>>>>>>> * formData.append("file", fileInput[0]['files'][0], >>>>>>>>> 'IndiansDiabetes.csv');* >>>>>>>>> * formData.append("datasetName", name);* >>>>>>>>> * formData.append("version", version);* >>>>>>>>> * formData.append("description", comments);* >>>>>>>>> * formData.append("sourceType", dataSourceType);* >>>>>>>>> * formData.append("sourcePath", null);* >>>>>>>>> * formData.append("destination", dataTargetType);** >>>>>>>>> formData.append("dataFormat", dataType);* >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>>> * var baseUrl = getBaseUrl(window.location.href);* >>>>>>>>> * $.ajax({* >>>>>>>>> * type: 'POST',* >>>>>>>>> * url: baseUrl + '/api/datasets', * >>>>>>>>> * contentType: "multipart/form-data",* >>>>>>>>> * processData: false,* >>>>>>>>> * data: formData,** beforeSend : >>>>>>>>> function(xhr) {* >>>>>>>>> >>>>>>>>> * xhr.setRequestHeader("Authorization", "Basic " + >>>>>>>>> "YWRtaW46YWRtaW4=");* >>>>>>>>> * },* >>>>>>>>> * success : function(res){* >>>>>>>>> * console.log('success');* >>>>>>>>> * },* >>>>>>>>> * error : function(res){* >>>>>>>>> * console.log('failed');* >>>>>>>>> * } * >>>>>>>>> * });** })* >>>>>>>> >>>>>>>> >>>>>>>> One thing I noticed was, When calling the service using CURL and >>>>>>>> REST-Client, the *@Multipart("file") InputStream inputStream* >>>>>>>> binds to a "LoadingByteArrayOutputStream", but when calling from AJAX >>>>>>>> (or >>>>>>>> even with a java client) it binds to a >>>>>>>> "org.apache.cxf.attachment.DelegatingInputStream", and hence writing an >>>>>>>> empty content to the server. >>>>>>>> >>>>>>>> Any idea on how to overcome this? >>>>>>>> >>>>>>>> Thanks, >>>>>>>> Supun >>>>>>>> >>>>>>>> -- >>>>>>>> *Supun Sethunga* >>>>>>>> Software Engineer >>>>>>>> WSO2, Inc. >>>>>>>> http://wso2.com/ >>>>>>>> lean | enterprise | middleware >>>>>>>> Mobile : +94 716546324 >>>>>>>> >>>>>>>> _______________________________________________ >>>>>>>> Dev mailing list >>>>>>>> [email protected] >>>>>>>> http://wso2.org/cgi-bin/mailman/listinfo/dev >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> Malith Munasinghe | Software Engineer >>>>>>> M: +94 (071) 9401122 >>>>>>> E: [email protected] >>>>>>> W: http://wso2.com >>>>>>> >>>>>>> _______________________________________________ >>>>>>> Dev mailing list >>>>>>> [email protected] >>>>>>> http://wso2.org/cgi-bin/mailman/listinfo/dev >>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> Best Regards, >>>>>> >>>>>> *Thilini Cooray* >>>>>> Software Engineer >>>>>> Mobile : +94 (0) 774 570 112 <%2B94%20%280%29%20773%20451194> >>>>>> E-mail : [email protected] >>>>>> >>>>>> WSO2 Inc. www.wso2.com >>>>>> lean.enterprise.middleware >>>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> *Supun Sethunga* >>>>> Software Engineer >>>>> WSO2, Inc. >>>>> http://wso2.com/ >>>>> lean | enterprise | middleware >>>>> Mobile : +94 716546324 >>>>> >>>> >>>> >>>> >>>> -- >>>> Malith Munasinghe | Software Engineer >>>> M: +94 (071) 9401122 >>>> E: [email protected] >>>> W: http://wso2.com >>>> >>> >>> >>> >>> -- >>> *Supun Sethunga* >>> Software Engineer >>> WSO2, Inc. >>> http://wso2.com/ >>> lean | enterprise | middleware >>> Mobile : +94 716546324 >>> >> >> >> >> -- >> Malith Munasinghe | Software Engineer >> M: +94 (071) 9401122 >> E: [email protected] >> W: http://wso2.com >> > > > > -- > Malith Munasinghe | Software Engineer > M: +94 (071) 9401122 > E: [email protected] > W: http://wso2.com > -- *Supun Sethunga* Software Engineer WSO2, Inc. http://wso2.com/ lean | enterprise | middleware Mobile : +94 716546324
_______________________________________________ Dev mailing list [email protected] http://wso2.org/cgi-bin/mailman/listinfo/dev
