angular multipart/form-data

在postman里面form表单提交格式有form-data x-www-form-urlencoded raw binary四种

如果在angular 要实现form-data格式要

1
2
3
4
5
6
7
8
9
10
11
12
$http({
method: 'POST',
url: url,
headers: {
'Content-Type': 'multipart/form-data'
},
data: {
data: model,
file: file
},
transformRequest: customFormDataObject
});

customFormDataObject function 可以为
1.

1
2
3
4
5
6
7
8
9
10
11
customFormDataObject formDataObject = function (data, headersGetter) {
var fd = new FormData();
angular.forEach(data, function (value, key) {
fd.append(key, value);
});

var headers = headersGetter();
delete headers['Content-Type'];

return fd;
};
  1. 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18

    customFormDataObject = function (data, headersGetter) {
    var fd = new FormData();

    var contentType = 'application/json';
    angular.forEach(data, function (value, key) {
    fd.append(key, new Blob([JSON.stringify(value)], {
    type: contentType
    }));
    contentType = 'image/png';
    });

    var headers = headersGetter();
    delete headers['Content-Type'];

    return fd;
    };

在chrome 请求的格式形式如图

原生js写法

1
2
3
4
5
6
7
8
9
10
var formData =new FormData();
formData.append('en_name','test');
formData.append('name','试试');
formData.append('brief','jianjie');
formData.append('icon_file',file);
formData.append('owner',$scope.loginUser.id);
formData.append('category',4);
var xml=new XMLHttpRequest();
xml.open('POST','/api/builds/project/create');
xml.send(formData);