0
私はダウンロード機能を持つAzureでホストされているサイトで作業しています。サーバーの負荷を軽減するために、共有アクセス署名を使用してダウンロードが行われます。ただし、Safariではファイルをダウンロードするときにファイル名が「myFile.txt」としてmyFile.txtをダウンロードする場合と同様に、単一引用符で囲まれます。これにより、ダウンロードされているzipをクライアントが名前を変更して内容を抽出できるようになりました。次のように生成された共有アクセス署名のためのAzure Storageからダウンロードファイル名の前後に一重引用符を追加
コードは次のとおりです。
CloudBlockBlob blob = container.GetBlockBlobReference(Helpers.StringHelper.TrimIfNotNull(blobName));
if (!blob.Exists())
{
return string.Empty;
}
var sasConstraints = new SharedAccessBlobPolicy();
sasConstraints.SharedAccessStartTime = DateTime.UtcNow.AddSeconds(-5);
sasConstraints.SharedAccessExpiryTime = DateTime.UtcNow.Add(duration);
sasConstraints.Permissions = SharedAccessBlobPermissions.Read | SharedAccessBlobPermissions.Write;
var headers = new SharedAccessBlobHeaders();
string filename = blobName;
if (filename.Contains("/"))
{
filename = blobName.Substring(blobName.LastIndexOf("/") + 1, blobName.Length - blobName.LastIndexOf("/") - 1);
}
headers.ContentDisposition = "attachment; filename='" + filename + "'";
//Generate the shared access signature on the blob, setting the constraints directly on the signature.
string sasBlobToken = blob.GetSharedAccessSignature(sasConstraints, headers);
//Return the URI string for the container, including the SAS token.
return blob.Uri + sasBlobToken;
このコードは、クロム、Firefox、およびIEで正常に働いています。私がヘッダーに欠けているものはありますか?私が修正している唯一のものはコンテンツの処分です。