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數據的也沒說清楚,誰知道你的問題出在哪啊?
把程式碼貼全再來吧