Get original filename when downloading with WebClient

Tim Dams picture Tim Dams · Dec 10, 2013 · Viewed 23.1k times · Source

Is there any way to know the original name of a file you download using the WebClient when the Uri doesn't contain the name?

This happens for example in sites where the download originates from a dynamic page where the name isn't known beforehand.

Using my browser, the file gets the orrect name. But how can this be done using the WebClient? E.g.

        WebClient wc= new WebClient();
        var data=   wc.DownloadData(@"www.sometime.com\getfile?id=123");

Using DownloadFile() isn't a solution since this method needs a filename in advance.

Answer

HaukurHaf picture HaukurHaf · Dec 10, 2013

You need to examine the response headers and see if there is a content-disposition header present which includes the actual filename.

WebClient wc = new WebClient();
var data=   wc.DownloadData(@"www.sometime.com\getfile?id=123");
string fileName = "";

// Try to extract the filename from the Content-Disposition header
if (!String.IsNullOrEmpty(wc.ResponseHeaders["Content-Disposition"]))
{
 fileName = wc.ResponseHeaders["Content-Disposition"].Substring(wc.ResponseHeaders["Content-Disposition"].IndexOf("filename=") + 9).Replace("\"", "");
}