我可以很好地上传图片。但是,我需要发送一个带有图像的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) {
}
答案 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)