2015-04-27 1 views
1

Это связано с How to download a file from a URL in C#?, но в моем случае url dosen't имеет имя файла, включенное в url. предположим, что URL-адрес www.test.com/files0 - это файл, а в браузере он загружается как 123.mpg, как я могу сохранить его на сервере с тем же именем и расширением?Загрузите файл в C# через url, когда тип файла и имя файла неизвестны

В принципе, я хочу получить имя и тип файла перед загрузкой файла с 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)); 

Смежные вопросы