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

Reply via email to