angular项目中由于某些原因设置了以下代码:
// $locationProvider.html5Mode(true);
$httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';
/**
* The workhorse; converts an object to x-www-form-urlencoded serialization.
* @param {Object} obj
* @return {String}
*/
var param = function (obj) {
var query = '', name, value, fullSubName, subName, subValue, innerObj, i;
for (name in obj) {
value = obj[name];
if (value instanceof Array) {
for (i = 0; i < value.length; ++i) {
subValue = value[i];
fullSubName = name + '[' + i + ']';
innerObj = {};
innerObj[fullSubName] = subValue;
query += param(innerObj) + '&';
}
}
else if (value instanceof Object) {
for (subName in value) {
subValue = value[subName];
fullSubName = name + '[' + subName + ']';
innerObj = {};
innerObj[fullSubName] = subValue;
query += param(innerObj) + '&';
}
}
else if (value !== undefined && value !== null)
query += encodeURIComponent(name) + '=' + encodeURIComponent(value) + '&';
}
return query.length ? query.substr(0, query.length - 1) : query;
};
// Override $http service's default transformRequest
$httpProvider.defaults.transformRequest = [function (data) {
return angular.isObject(data) && String(data) !== '[object File]' ? param(data) : data;
}];
结果导致现在文件不能上传,最简单的一个form表单提交都不行:
<form action="upload/url" name="form1" method="post" enctype="multipart/form-data">
<input id="file" name="file" type="file" accept="image/*">
<button type="submit" class="btn btn-primary btn-lg">提交</button>
</form>
向各位大神求助,怎么样能正常上传图片?急,很急啊,项目都已经延期一天了……谢谢!
https://github.com/nervgh/ang... 拿去,不谢
题主提了两个问题1.为什么做了header设置 2.如何上传图片
一、为什么做了header设置,在base级别httpProvider添加header设置
http://stackoverflow.com/ques...
公司程序员应该参考这个问题。你们公司的后端api交互使用了Content-Type: x-www-form-urlencoded, 而angular使用了Content-type:application/json.所以做了改变Content-type和序列化。 题主可以参考。
二、上传图片
题主的描述,不是很明白是怎么发起这次提交的。但是问题是因为文件提交的content-type设置错误。提供一种采用FormData提交的方法:
你js那段代码就是要把数据encode成
x-www-form-urlencoded
的形式。但是你的html中没有进行数据绑定,这肯定不行!所以我怀疑你根本还没搞懂angularjs的使用。而且,你是怎么post数据的也没说清楚,谁知道你的问题出在哪啊?
把代码贴全再来吧