我正在从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();
任何类的默认.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了解更多信息。