Perniagaan sedia ada sepenuhnya menggunakan aplikasi muka depan Angular.JS satu halaman, dan semua permintaan dihantar melalui ajax.
Sekarang saya mahu memuat naik fail terus ke Youpaiyun pada bahagian klien Saya mencuba muat naik fail sudut, tetapi hasil yang diserahkan ialah
400: tidak terima, terlepas tandatangan
Tangkapan paket mendedahkan bahawa data borang untuk dasar dan tandatangan tidak diserahkan sama sekali.
Inilah yang saya tulis:
$scope.onFileSelect = function ($files) {
var file = $files[0]; //这里我只传单个文件
$scope.upload = $upload.upload({
url: 'http://v0.api.upyun.com/youguess',
method: 'POST',
headers: {'Content-Type': 'multipart/form-data'},
data: {
signature: 'youguess',
policy: 'youguess'
},
fileFormDataName: 'file',
file: file,
formDataAppender: function (formData, key, value) {
if (angular.isArray(value)) {
angular.forEach(value, function(v) {
formData.append(key, v);
});
} else {
formData.append(key, value);
}
}
}).progress(function (event) {
console.log(parseInt(100.0 * event.loaded / event.total));
}).success(function (data, status, headers, config) {
console.log(data);
});
};
Saya merujuk kepada ini dan isu ini projek github ini
apa yang perlu saya lakukan?
Saya juga ada dua soalan:
Merujuk isu ini
Selagi isu keselamatan tandatangan diselesaikan, fail boleh dimuat naik dengan jayanya. Terima kasih semua.
Penyelesaian:
hai Biar saya jawab dua soalan anda yang seterusnya dahulu:
Tandatangan
tandatangan termasuk
form_api_secret
, jadi jika anda menulisnya terus di bahagian hadapan, memang akan ada isu keselamatan: jika orang lain mendapatform_api_secret
anda, mereka boleh menulis borang mereka sendiri dan menyerahkan fail ke ruang anda dan menggunakan trafik anda.dasar boleh dijana pada bahagian hadapan menggunakan base64. Walaupun dasar ialah kandungan parameter pengekodan dan tiada isu keselamatan, tetapi disebabkan
$signature = md5($policy.'&'.$form_api_secret);
, isu keselamatan yang disebutkan di atas masih akan berlaku.Mengenai soalan kod, @PenaFong telah dijemput untuk menjawabnya.
Tandatangan dijana dengan meminta bahagian belakang seperti yang diperlukan, dan form_api_secret akan didedahkan apabila dikira pada bahagian hadapan
http://stackoverflow.com/questions/24443246/angularjs-how-to-upload-multipart-form-data-and-a-file
http://uncorkedstudios.com/blog/multipartformdata-file -muat naik-dengan-angularjs