L'entreprise existante utilise entièrement l'application frontale Angular.JS monopage, et toutes les demandes sont envoyées via ajax.
Maintenant, je souhaite télécharger des fichiers directement sur Youpaiyun côté client. J'ai essayé le téléchargement de fichiers angulaires, mais le résultat soumis était
.400 : pas d'acceptation, manque de signature
La capture des paquets a montré que les données du formulaire de politique et de signature n'étaient pas du tout soumises.
Voici ce que j'ai écrit :
$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);
});
};
J'ai fait référence à ceci et à ces problèmes de ce projet github
que dois-je faire ?
J'ai aussi deux questions :
J'ai référencé ce problème
Tant que le problème de sécurité de la signature est résolu, le fichier peut être téléchargé avec succès. Merci à tous.
Solution :
Bonjour, laissez-moi d'abord répondre à vos deux prochaines questions :
La signature de
signature inclut
form_api_secret
, donc si vous l'écrivez directement sur le front-end, il y aura effectivement des problèmes de sécurité : si d'autres personnes obtiennent votreform_api_secret
, elles peuvent rédiger leur propre formulaire et le soumettre le fichier dans votre espace et utilisez votre trafic.La politique peut être générée sur le frontend en utilisant base64. Bien que la politique soit le contenu du paramètre encode et qu'il n'y ait pas de problème de sécurité, mais à cause de
$signature = md5($policy.'&'.$form_api_secret);
, il y aura toujours le problème de sécurité mentionné ci-dessus.Concernant la question du code, @PenaFong a été invité à y répondre.
La signature est générée en demandant au backend si nécessaire, et le form_api_secret sera exposé une fois calculé sur le frontend
http://stackoverflow.com/questions/24443246/angularjs-how-to-upload-multipart-form-data-and-a-file
http://uncorkedstudios.com/blog/multipartformdata-file -télécharger-avec-angularjs