www org mapwingis mapwindows mapwindow español c# download

c# - org - Obtén el nombre del archivo mientras lo descargas



mapwindows 5 (5)

Aquí está el código completo requerido, asumiendo que el servidor ha aplicado el encabezado de disposición de contenido:

using (WebClient client = new WebClient()) { using (Stream rawStream = client.OpenRead(url)) { string fileName = string.Empty; string contentDisposition = client.ResponseHeaders["content-disposition"]; if (!string.IsNullOrEmpty(contentDisposition)) { string lookFor = "filename="; int index = contentDisposition.IndexOf(lookFor, StringComparison.CurrentCultureIgnoreCase); if (index >= 0) fileName = contentDisposition.Substring(index + lookFor.Length); } if (fileName.Length > 0) { using (StreamReader reader = new StreamReader(rawStream)) { File.WriteAllText(Server.MapPath(fileName), reader.ReadToEnd()); reader.Close(); } } rawStream.Close(); } }

Si el servidor no configuró este encabezado, intente la depuración y vea qué ResponseHeaders tiene, uno de ellos probablemente contendrá el nombre que desea. Si el navegador muestra el nombre, debe venir de algún lugar ... :)

Estamos proporcionando archivos que se guardan en nuestra base de datos y la única manera de recuperarlos es por su id como en:

www.AwesomeURL.com/AwesomeSite.aspx?requestedFileId=23

Todo funciona correctamente mientras uso la Clase de WebClient .

Solo hay un problema al que me enfrento:

¿Cómo puedo obtener el nombre de archivo real ?

Mi código se parece a este cajero automático:

WebClient client = new WebClient (); string url = "www.AwesomeURL.com/AwesomeSite.aspx?requestedFileId=23"; client.DownloadFile(url, "IDontKnowHowToGetTheRealFileNameHere.txt");

Todo lo que sé es la identificación .

Esto no sucede cuando intento acceder a la url desde el navegador donde se encuentra el nombre correcto => DownloadedFile.xls .

¿Cuál es la forma correcta de obtener la respuesta correcta?


Debe mirar el encabezado de content-disposition través de:

string disposition = client.ResponseHeaders["content-disposition"];

Un ejemplo típico sería:

"attachment; filename=IDontKnowHowToGetTheRealFileNameHere.txt"


Esto lo logro con el código de wst.

Aquí está el código completo para descargar el archivo url en la carpeta c: / temp

public static void DownloadFile(string url) { using (WebClient client = new WebClient()) { client.OpenRead(url); string header_contentDisposition = client.ResponseHeaders["content-disposition"]; string filename = new ContentDisposition(header_contentDisposition).FileName; //Start the download and copy the file to the destinationFolder client.DownloadFile(new Uri(url), @"c:/temp/" + filename); } }


Puede usar el encabezado de content-disposition HTTP para sugerir nombres de archivos para el contenido que está proporcionando:

Content-Disposition: attachment; filename=downloadedfile.xls;

Por lo tanto, en su script AwesomeSite.aspx , debe establecer el encabezado de content-disposition . En su clase de WebClient , recuperaría ese encabezado para guardar el archivo como lo sugiere su sitio AwesomeSite .


Tuve el mismo problema y encontré esta clase: System.Net.Mime.ContentDisposition .

using (WebClient client = new WebClient()){ client.OpenRead(url); string header_contentDisposition = client.ResponseHeaders["content-disposition"]; string filename = new ContentDisposition(header_contentDisposition).FileName; ...do stuff... }

La documentación de la clase sugiere que está diseñada para archivos adjuntos de correo electrónico, pero funciona bien en el servidor que solía probar, y es realmente bueno evitar el análisis.