1

我有一个用于填写个人资料的 HTML 表单,其中包括字符串和图像。我需要通过一个后端 api 调用将所有这些数据作为 JsonObject 发布,而后端需要将图像文件作为二进制数据发送。这是我的 Json 数据,如下所示:

var profile = {
            "userId"                : email_Id,
            "profile.name"              : "TML David",
            "profile.profilePicture"        : profilePhotoData,
            "profile.galleryImageOne"       : profileGalleryImage1Data,
            "profile.referenceQuote"        : "Reference Quote"
    }; 

并且,profilePhotoData、profileGalleryImage1Data、profileGalleryImage2Data、profileGalleryImage3Data都是图片二进制数据(Base64)。

这是我的帖子功能:

function APICallCreateProfile(profile){
    var requestUrl = BASE_URL + API_URL_CREAT_PROFILE;

    $.ajax({
        url: requestUrl,
        type: 'POST',
        data: profile,
        dataType:DATA_TYPE,
        contentType: CONTENT_TYPE_MEDIA,
        cache:false,
        processData:false,
        timeabout:API_CALL_TIMEOUTS,
        success: function (response) {
            console.log("response " + JSON.stringify(response));
             var success = response.success;
             var objectData = response.data;
             if(success){
                 alert('CreateProfile Success!\n' + JSON.stringify(objectData));
             }else{
                 alert('CreateProfile Faild!\n'+ data.text);
             }
        },
        error: function(data){
             console.log( "error" +JSON.stringify(data)); 
        },
        failure:APIDefaultErrorHandler
    })
    .done(function() { console.log( "second success" ); })
    .always(function() { console.log( "complete" ); });


    return false;
}

但还是失败了,我检查了服务器端,它抱怨“没有找到多部分边界”。

谁能帮帮我,谢谢:)

更新:var DATA_TYPE = "json"; var CONTENT_TYPE_MEDIA = "multipart/form-data";

4

2 回答 2

3

我想我在 vineet 的帮助下找到了解决方案。我用的是XMLHttpRequest,并没有设置requestHeader,但是能用,很奇怪。但希望以下内容能有所帮助

function APICallCreateProfile(formData){
            var requestUrl = BASE_URL + API_URL_CREAT_PROFILE;
            var xhr = new XMLHttpRequest();
            xhr.onreadystatechange=function()
            {
              if (xhr.readyState==4 && xhr.status==200){
                  console.log( "profile:" + xhr.responseText); 
              }else if (xhr.readyState==500){
                  console.log( "error:" + xhr.responseText); 
              }
            }


            xhr.open('POST', requestUrl, true);
            //    xhr.setRequestHeader("Content-Type","multipart/form-data; boundary=----WebKitFormBoundarynA5hzSDsRj7UJtNa");
            xhr.send(formData);

            return false;
         }
于 2013-06-12T01:54:43.967 回答
0

为什么要重新发明轮子。只需在此处使用 Jquery 表单插件。它也有分段上传的例子。

您只需要将输入类型设置为文件。您将在服务器上接收文件作为输入流(当然它们将是多部分的)

于 2013-06-03T08:23:05.470 回答