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
_______________________________________________ Dev mailing list [email protected] http://wso2.org/cgi-bin/mailman/listinfo/dev
