2015-04-27 125 views
1

這與How to download a file from a URL in C#?有關,但在我的情況下,url沒有包含在url中的文件名。假設一個網址www.test.com/files0是一個文件,並在瀏覽器中它被下載爲123.mpg我怎樣才能將它保存在服務器上具有相同的名稱和擴展名?當文件類型和文件名未知時,通過url下載c#文件

基本上,我想在從url下載文件之前獲取文件名和類型,並且只有在允許的擴展名的情況下才下載文件。

+1

我不認爲一個服務器甚至會允許你下載一個文件,從文件名/完整路徑的文件。 – Austinh100

+1

你應該在響應頭中有文件名'Content-Disposition' – py3r3str

+0

沒有擴展名是未知的MIME類型。如果IIS沒有設置爲此服務,您將無法下載它... – Tim

回答

4

假設您使用HttpClient類來提出請求,您可以使用HttpResponseMessage,查詢返回以決定是否要下載該文件。例如:

HttpClient client = new HttpClient(); 

HttpResponseMessage response = await client.GetAsync("http://MySite/my/download/path").ConfigureAwait(false); 

if (!String.Equals(response.Content.Headers.ContentDisposition.DispositionType, "attachment", StringComparison.OrdinalIgnoreCase)) { 
    return; 
} 

// Call some method that will check if the file extension and/or media type 
// of the file are acceptable. 
if (!IsAllowedDownload(response.Content.Headers.ContentDisposition.FileName, response.Content.Headers.ContentType.MediaType)) { 
    return; 
} 

// Call some method that will take a stream containing the response payload 
// and write it somewhere. 
WriteResponseStream(await response.Content.ReadAsStreamAsync().ConfigureAwait(false));