在同一请求中发送多种类型的内容

时间:2017-02-20 09:14:05

标签: angularjs multipart angular-http request-headers

我使用的是角度1.5,我必须点击服务才能上传文件。在同一服务中,我也必须将JSON作为请求体传递。

当我使用Content-type: application/json multipart for file无法正常工作时,如果我使用Content-type: undefined,那么multipart将起作用,但JSON参数不起作用。那么有什么方法可以设置value {j} {j} key-valuemultipart?或者其他任何方式来做到这一点?

由于

1 个答案:

答案 0 :(得分:1)

以这种方式尝试,你会没事的:

$scope.uploadMultipart = function(file, jsonObject, uploadUrl){
    var formData = new FormData();

    formData.append('json',JSON.stringify(jsonObject));
    formData.append('file', file);

    return $http({
        url: uploadUrl,
        method: 'POST',
        data: formData,
        headers: { 'Content-Type': undefined},
        transformRequest: angular.identity
    });
};

我不推荐它,但这就是你如何将文件添加为JSON对象的一部分。通过这种方式,您可以发布内容类型application/json

$scope.uploadHack = function(file, jsonObject, uploadUrl){

    var aReader = new FileReader();
    aReader.readAsText(file, "UTF-8");
    aReader.onload = function (evt) {

        //append file to json as raw data
        jsonObject.file = {
            content:  aReader.result,
            name: file.name,
            size: file.size
        };

        $http({
            url: uploadUrl,
            method: 'POST',
            data: jsonObject,
            headers: { 'Content-Type': 'application/json'},
            transformRequest: angular.identity
        });
    }
};