如何从Response.Header获取文件名?C#
这是一个代码,C#如何从Response.Header获取文件名?C#,c#,browser,download,filenames,download-manager,C#,Browser,Download,Filenames,Download Manager,这是一个代码,C# 根据请求中的标题,您应该能够执行以下操作: string file = result.Headers["Location"]; 如果您已经获得了文件的位置,您只需提取所需的标题(在本例中,我假设它在4或“location”)进行索引,然后获取URL的最后一部分。按如下方式执行: string fileName = Path.GetFileName(result.Headers["Location"]); 这样,文件名将位于位置标头的末尾。由于文件位于服务器上,您
根据请求中的标题,您应该能够执行以下操作:
string file = result.Headers["Location"];
如果您已经获得了文件的位置,您只需提取所需的标题(在本例中,我假设它在
4
或“location”
)进行索引,然后获取URL的最后一部分。按如下方式执行:
string fileName = Path.GetFileName(result.Headers["Location"]);
这样,文件名将位于位置标头的末尾。由于文件位于服务器上,您将无法检索实际的文件名。只有web应用程序告诉您的信息 此文件名位于“位置” 但是,由于应用程序告诉您它是text/html,因此在将结果发送给您之前,它可能正在格式化结果。可执行文件的正确mime类型是应用程序/八位字节流 另一方面。看起来您正在下载文件,在这种情况下,不需要提供路径。您下载的文件的路径将是您将下载流的内容放入其中的任何路径。 因此,您可以保存文件并将其放在您有权放置的任何位置 创建文件时,必须提供路径,否则它将与调用它的可执行文件放在同一目录中
我希望这有帮助正确的方法是查看字段是否提供了文件名,如果没有,则尝试从位置字段推断文件名
请注意,location字段只是下载请求的URL,因此可能不包含扩展名,甚至不包含有意义的名称。如果所有其他操作都失败,则始终可以解析WebResponse.ResponseUri.ToString()。使用string.LastIndexOf(“/”)查找文件名的开头,使用string.IndexOf查看是否有“?”
从内容处置字段检索文件名的简单有效方法:
using System.Net.Mime;
HttpWebResponse resp = {YOUR RESPONSE}
string dispHeader = resp.GetResponseHeader("content-disposition");
ContentDisposition disp = new ContentDisposition(dispHeader);
string filename = disp.FileName;
这与Reed Copsey的答案非常相似,但只给出文件名,而不给出url的其余部分。您可能需要将_响应变量的名称更改为_请求。这是一个HttpWebRequest,而不是HttpWebResponse,称之为_Response有点误导。
string fileName = Path.GetFileName(result.Headers["Location"]);
public static void ExtractFileNameFromUri(string URI, ref string parsedFileName, string fileNameStartDelimiter = "/", string fileNameEndDelimiter = "?")
{
const int NOTFOUND = -1;
try
{
int startParse = URI.LastIndexOf(fileNameStartDelimiter) + fileNameStartDelimiter.Length;
if (startParse == NOTFOUND)
return;
int endParse = URI.IndexOf(fileNameEndDelimiter);
if (endParse == NOTFOUND)
endParse = URI.Length;
parsedFileName = URI.Substring(startParse, (endParse - startParse));
}
catch (Exception e)
{
Console.WriteLine(e);
return;
}
}
using System.Net.Mime;
HttpWebResponse resp = {YOUR RESPONSE}
string dispHeader = resp.GetResponseHeader("content-disposition");
ContentDisposition disp = new ContentDisposition(dispHeader);
string filename = disp.FileName;