Azure blob DownloadToStream指定本地文件名

问题描述 投票:0回答:1

我正在从Azure blob存储中下载pdf文件并指定本地文件名和扩展名。

它下载到下载目录,但名称为Microsoft.WidowsAzure.Storage.Blob文件名,没有扩展名。

我想指定文件名而不是目录。

    MemoryStream memStream = new MemoryStream();
    blockBlob.DownloadToStream(memStream);
    HttpContext.Current.Response.ContentType = blockBlob.Properties.ContentType.ToString();
    // Response.AddHeader("Content-Disposition", "Attachment; filename=" + blobName.ToString());    
    HttpContext.Current.Response.AddHeader("Content-Disposition", "Attachment; filename=" + blockBlob.ToString());
    HttpContext.Current.Response.AddHeader("Content-Length", blockBlob.Properties.Length.ToString());
    HttpContext.Current.Response.BinaryWrite(memStream.ToArray());
    HttpContext.Current.Response.Flush();
    HttpContext.Current.Response.Close();
c# pdf blob azure-storage
1个回答
0
投票

任何类的默认.ToString()方法,除非被该类覆盖,否则将打印完全限定的类名(在您的情况下会发生)。相反,你需要使用blob的.Name属性来获取密钥。获得密钥后,可以将其剥离为文件名部分:

string fileName = Path.GetFileName(blob.Name);
HttpContext.Current.Response.AddHeader("Content-Disposition", "Attachment; filename=" + fileName);

为了安全起见(就文件名中的错误字符而言),您可能需要考虑使用filename*=中描述的RFC6266并使用适当的编码:

string encodedFileName = Server.UrlEncode(Path.GetFileName(blob.Name), Encoding.UTF8);
HttpContext.Current.Response.AddHeader("Content-Disposition", "Attachment; filename*=UTF-8''" + fileName);

See this question了解更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.