Je suis en train de mettre en œuvre les ajax browser uploads directement dans un conteneur de stockage azure. Tout d'abord, j'ai besoin d'une URL signée qui me permettra de le faire sans partager ma clé privée avec le navigateur (je demande à mon serveur pour cette URL signée sur un appel ajax précédent). Mon code côté serveur ressemble à ceci:Comment puis-je générer une en-tête Content-Length d'une signature Azure SAS à une certaine valeur?
public string GetSignature(string fileName, int contentLength)
{
CloudBlobContainer blobContainer = this.BlobClient.GetContainerReference("demo");
CloudBlockBlob blob = blobContainer.GetBlockBlobReference("photo1.jpg");
SharedAccessBlobPolicy policy = new SharedAccessBlobPolicy()
{
Permissions = SharedAccessBlobPermissions.Create,
SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(10)
};
SharedAccessBlobHeaders headers = new SharedAccessBlobHeaders()
{
CacheControl = "",
ContentDisposition = "",
ContentEncoding = "",
ContentLanguage = "",
ContentType = ""
// PROBLEM: Where's content length?
};
return blob.GetSharedAccessSignature(policy, headers);
}
Mon problème est que je ne peux pas trouver un moyen de spécifier l'en-tête de longueur du contenu. J'en ai besoin pour empêcher les utilisateurs de télécharger des fichiers volumineux une fois qu'ils ont une citation de stockage qui doit être respectée. J'ai beaucoup googlé et trouvé un moyen de le faire qui implémente l'algorithme de signature selon this link, mais mettre en œuvre tout cela moi-même est juste mon dernier recours (il sera plus sujet aux erreurs et prendra du temps). Donc, ma question est, est-il un moyen de passer la contrainte de longueur de contenu à une URL signée PUT
?