如何从Response.Header获取文件名?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"]); 这样,文件名将位于位置标头的末尾。由于文件位于服务器上,您

这是一个代码,C#


根据请求中的标题,您应该能够执行以下操作:

 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;