![](/img/trans.png)
[英]How to pass long filename in url and download the file using php function?
[英]How to download file with filename?
一個問題我已經好幾個禮拜了。
我向客戶端提供了一個下載URL,以便從存儲設備下載內容。 這是我的方法:
var sasConstraints = new SharedAccessBlobPolicy();
sasConstraints.SharedAccessStartTime = DateTime.UtcNow.AddMinutes(-5);
sasConstraints.SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(10);
sasConstraints.Permissions = SharedAccessBlobPermissions.Read;
var sasBlobToken = blob.GetSharedAccessSignature(sasConstraints);
通過這種方式,我生成了指向Azure存儲Blob的鏈接。
現在,我將此鏈接發送給客戶端,並以以下方式打開它:
let a = document.createElement('a');
a.download = data.fileName;
a.href = data.url
a.click()
document.removeChild(a)
但是它仍然不會下載具有正確文件名的文件(它將其下載為Blob的GUID)。 發生這種情況是因為azure存儲使用標題覆蓋了我在download
屬性中指定的名稱。 如何獲得正確的文件名? 我應該嘗試禁用Azure存儲的標頭嗎? 我應該在客戶端上更改代碼嗎?
假設您有一個名為abc.png
的blob,並且希望將其下載為def.png
,可以做的是覆蓋SAS令牌中的Content-Disposition
標頭。 然后,當用戶單擊下載鏈接時,默認情況下該文件將另存為def.png
。
請參見下面的示例代碼:
private static void OverrideContentDispositionHeaderInSharedAccessSignature()
{
var cred = new StorageCredentials(accountName, accountKey);
var account = new CloudStorageAccount(cred, true);
var blobClient = account.CreateCloudBlobClient();
var container = blobClient.GetContainerReference("container-name");
var blob = container.GetBlockBlobReference("abc.png");
var sasConstraints = new SharedAccessBlobPolicy();
sasConstraints.SharedAccessStartTime = DateTime.UtcNow.AddMinutes(-5);
sasConstraints.SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(10);
sasConstraints.Permissions = SharedAccessBlobPermissions.Read;
var sasBlobHeaders = new SharedAccessBlobHeaders()
{
ContentDisposition = "attachment; filename=\"def.png\""
};
var sasBlobToken = blob.GetSharedAccessSignature(sasConstraints, sasBlobHeaders);
var sasUrl = blob.Uri.AbsoluteUri + sasBlobToken;
}
這樣,您無需在link元素上設置download
屬性。 您的客戶端代碼將非常簡單。 就像是:
let a = document.createElement('a');
a.href = data.url
a.click()
document.removeChild(a)
您不能強制客戶端下載具有特定文件名的文件。 客戶端可以在“ Save File
對話框中或將文件保存到本地文件系統時更改文件名。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.