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 <mali...@wso2.com> wrote:

> Hi Supun!
>
> Try Making contentType: false,
>
> Regards,
> Malith.
>
> On Thu, Apr 23, 2015 at 5:20 PM, Supun Sethunga <sup...@wso2.com> 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
>> Dev@wso2.org
>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>
>>
>
>
> --
> Malith Munasinghe | Software Engineer
> M: +94 (071) 9401122
> E: mali...@wso2.com
> W: http://wso2.com
>
> _______________________________________________
> Dev mailing list
> Dev@wso2.org
> 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 : thili...@wso2.com

WSO2 Inc. www.wso2.com
lean.enterprise.middleware
_______________________________________________
Dev mailing list
Dev@wso2.org
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to