如何使用jQuery发布文件和json?

时间:2014-08-28 21:16:47

标签: jquery file curl cxf jax-rs

我正在使用Apache CXF并拥有以下JAX-RS POST服务:

@POST
@Path("/{id}/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadFile(@PathParam("id") final String id,
        @Multipart(value = "file") final InputStream inputStream,
        @Multipart(value = "body") final SomeDTO dto);

我可以用curl成功调用服务:

curl -F file="@filetoparse.csv;type=text/csv" -F body='{"time": "2000-01-02T15:11:00-0700","employeeId": "e1"};type=application/json'   http://localhost:8085/my-app/1.0.0/somepath/1/upload

我尝试用html表单调用该服务。但没有运气。看一下chrome控制台,我可以看到只发送了一个Request Payload,即文件。 JSON没有被发送。

所以我将尝试使用jquery帖子。 如何使用jquery发送两个Request Payload?

1 个答案:

答案 0 :(得分:1)

我可以使用此调用:

var data = new FormData();

myFile = $("#myId").find("input[type='file']")[0].files[0];
var fileblob = new Blob([myFile], { type: "text/csv"});
data.append('file', fileblob);

var myJson = $("#myId2").find("textarea").val();
var jsonblob = new Blob([myJson], { type: "application/json"});
data.append('body', jsonblob);

$.ajax({
    url: 'someUrl',
    data: data,
    cache: false,
    contentType: false,
    processData: false,
    type: 'POST'
}).done(function (data, statusText, xhr) {
    var status = xhr.status;
    //Do something depending the status
});