Le téléchargement par formulaire permet aux applications web de charger des objets directement vers OSS via des formulaires HTML standard. Le navigateur envoie une requête PostObject à OSS sans passer par votre serveur d'application, ce qui réduit la charge du serveur et améliore l'efficacité et la stabilité du chargement.
Limites
La taille des objets chargés via un formulaire ne peut pas dépasser 5 Go.
Scénarios
Cas d'utilisation courants du téléchargement par formulaire :
Chargement de données utilisateur : chargez des avatars, des photos d'identité ou des documents de vérification d'identité lors de l'inscription ou de la mise à jour du profil.
Partage et stockage de fichiers : chargez des documents, des images, des fichiers audio et vidéo vers Alibaba Cloud via des lecteurs en ligne ou des plateformes de collaboration.
Publication de contenu : chargez des images et des pièces jointes sur des blogs, des forums et des plateformes de questions-réponses.
Commerce électronique : chargez des images de produits, des descriptions et des documents de qualification. Les consommateurs chargent des factures ou des justificatifs lors de leurs achats.
Éducation en ligne : les étudiants soumettent leurs devoirs et projets. Les enseignants chargent du matériel pédagogique et des supports de cours.
Recrutement : les candidats chargent leur CV et leur portfolio. Les employeurs chargent des logos et des offres d'emploi.
Enquêtes et retours : chargez des documents justificatifs ou des preuves avec des questionnaires en ligne.
Collaboration au développement : chargez des fichiers de code ou des documents de projet depuis des plateformes telles que GitHub et GitLab.
Fonctionnement
Le client obtient la signature et la politique POST depuis le serveur d'application, puis charge les objets directement sans utiliser les SDK OSS. La politique POST peut restreindre les attributs des objets, tels que la taille et le type. Le téléchargement par formulaire ne prend pas en charge le chargement multipart ni le chargement avec reprise. Pour plus d'informations, consultez PostObject.
Flux de chargement utilisant une signature Post et une politique Post :
Le client demande la signature Post, la politique Post et d'autres informations au serveur d'application.
Le serveur d'application génère la signature Post, la politique Post et les informations associées, puis les renvoie au client.
Le client appelle PostObject avec la signature Post et la politique Post pour charger le fichier vers OSS via un formulaire HTML.
OSS renvoie une réponse de succès au client.
Procédure
-
Générez la signature et la politique POST sur le serveur.
Exemple de projet : postsignature.zip
-
Exemples
-
Appelez l'opération PostObject avec la signature et la politique POST pour charger l'objet vers OSS à l'aide d'un formulaire HTML.
Exemple JavaScript :
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Upload an object to OSS</title> </head> <body> <div class="container"> <form> <div class="mb-3"> <label for="file" class="form-label">Select the object</label> <input type="file" class="form-control" id="file" name="file" required> </div> <button type="submit" class="btn btn-primary">Upload</button> </form> </div> <script type="text/javascript"> const form = document.querySelector('form'); const fileInput = document.querySelector('#file'); form.addEventListener('submit', (event) => { event.preventDefault(); let file = fileInput.files[0]; let filename = fileInput.files[0].name; fetch('/get_post_signature_for_oss_upload', { method: 'GET' }) .then(response => response.json()) .then(data => { const formData = new FormData(); formData.append('name',filename); formData.append('policy', data.policy); formData.append('OSSAccessKeyId', data.ossAccessKeyId); formData.append('success_action_status', '200'); formData.append('signature', data.signature); formData.append('key', data.dir + filename); // Set file to the last form field. No particular order is required for other form fields. formData.append('file', file); fetch(data.host, { method: 'POST', body: formData},).then((res) => { console.log(res); alert ('Object Uploaded'); }); }) .catch(error => { console.log('Error occurred while getting OSS upload parameters:', error); }); }); </script> </body> </html>
Remarques d'utilisation
Sécurité des données
Écrasement d'objets
Par défaut, OSS écrase les objets existants portant le même nom. Vous pouvez éviter les écrasements involontaires en utilisant les méthodes suivantes :
-
Activez le versioning pour le bucket
Si le versioning est activé, les objets écrasés sont enregistrés en tant que versions précédentes que vous pouvez restaurer à tout moment. Pour plus d'informations, consultez Versioning.
-
Incluez le paramètre x-oss-forbid-overwrite dans la requête de chargement
Ajoutez le paramètre x-oss-forbid-overwrite aux champs du formulaire et définissez-le sur true. Si un objet portant le même nom existe, le chargement échoue avec une erreur
FileAlreadyExists. Si ce paramètre n'est pas inclus ou s'il est défini sur false, l'objet chargé écrase l'objet existant.
Chargement autorisé
OSS propose un contrôle d'accès au niveau du bucket et de l'objet pour empêcher les chargements non autorisés. Pour plus d'informations, consultez Présentation des autorisations et du contrôle d'accès.
Vous pouvez utiliser une URL signée pour permettre à un tiers de charger un objet spécifique sans identifiants d'accès. OSS stocke les données chargées en tant qu'objet dans le bucket. Pour plus d'informations, consultez Chargements d'objets à l'aide d'URL présignées.
Coûts des requêtes PUT
Si vous souhaitez charger un grand nombre d'objets, spécifier directement la classe de stockage Deep Cold Archive pour les objets à charger entraîne des frais de requête PUT élevés. Nous vous recommandons de spécifier d'abord la classe de stockage Standard pour les objets lors de leur chargement, puis d'utiliser des règles de cycle de vie pour les convertir vers la classe de stockage Deep Cold Archive afin de réduire les frais de requête PUT.
Buckets avec OSS-HDFS activé
Pour maintenir la stabilité d'OSS-HDFS et éviter toute perte de données, ne chargez pas d'objets dans le répertoire .dlsdata/ d'un bucket avec OSS-HDFS activé en utilisant des méthodes non prises en charge par OSS-HDFS.
Optimisation des performances de chargement
Si les noms d'objets contiennent des préfixes séquentiels tels que des horodatages et des lettres, plusieurs index peuvent être stockés dans une seule partition, ce qui augmente la latence des requêtes. Utilisez des préfixes aléatoires plutôt que des préfixes séquentiels lors du chargement de grands volumes d'objets. Pour plus d'informations, consultez Meilleures pratiques de performance OSS.