如何向FormData添加多个对象

时间:2016-12-14 21:46:37

标签: javascript java ajax rest

我可以很好地上传图片。但是,我需要发送一个带有图像的json对象,以便我可以识别图像所属的记录。我究竟做错了什么?为什么变量信息在服务的java端通过null?

客户端:

let file = event.target.files[0];
 let info = {formId:8, formVersionId:2, formIndex:0};
var formData = new FormData();
            formData.append('file', file);
            formData.append('info', info );
            $.ajax({
                url: URL.BUILDER_URL + '/megaUpload',
                type: 'POST',
                data : formData,
                cache : false,
                contentType : false,
                processData : false,
            });

服务器:

public Response uploadFile( @FormDataParam("file") InputStream uploadedInputStream, 
                                @FormDataParam("file") FormDataContentDisposition fileDetail,
                                @FormDataParam("info") GuiCreateResponse info) {
}

3 个答案:

答案 0 :(得分:1)

https://developer.mozilla.org/en-US/docs/Web/API/FormData/append

这里明确指出, FormData值可以是字符串或blob。

let file = event.target.files[0];
var formData = new FormData();
            formData.append('file', file);
            formData.append('formId', '8' );
            formData.append('formVersionId', '2' );
            formData.append('formIndex', '0');

这可以解决您的问题。

答案 1 :(得分:0)

您使用的是formId,但您可能希望将其用引号括起来"formId"。试试这段代码。

let file = event.target.files[0];
let info = {"formId":8, "formVersionId":2, "formIndex":0}; //See changes here
var formData = new FormData();
            formData.append('file', file);
            formData.append('info', info );
            $.ajax({
                url: URL.BUILDER_URL + '/megaUpload',
                type: 'POST',
                data : formData,
                cache : false,
                contentType : false,
                processData : false,
            });

答案 2 :(得分:0)

也许这是你的问题。 docs说,"当使用append()方法时,可以使用第三个可选参数在发送到服务器的Content-Disposition标头内传递文件名。如果没有指定文件名(或者不支持参数),则名称为" blob"使用。"

由于您没有提供第三个参数,我认为FormDataContentDisposition需要查找" blob"。尝试更改服务器注释以检查该名称:

public Response uploadFile( @FormDataParam("file") InputStream uploadedInputStream, 
                            @FormDataParam("blob") FormDataContentDisposition fileDetail,
                            @FormDataParam("info") GuiCreateResponse info)