Pregunta

Al principio, déjame describir la situación. Mi aplicación en C# le pide al servidor PHP la actualización más reciente. Utiliza su URL y un simple post atributos como: 127.0.0.1/update.php?ver=0.2, el servidor responde con 404 si nunca hay una versión nunca que 0.2 y con 200 ok cuando hay una versión más nueva y comienza a enviar el archivo binario En tipo mime: octeto.

No tengo ningún problema para obtener este archivo, pero tengo problemas para obtener su nombre de archivo.

Con este código:

WebClient webClient = new WebClient();
webClient.DownloadFile("http://127.0.0.1/update.php?ver=0.2", filename);

Tengo que poner mi Nombre del archivo Pero, ¿qué pasa si quiero que tenga el mismo nombre que el archivo en el servidor? ¿Cómo puedo obtenerlo antes de descargarlo?

¿Fue útil?

Solución

Si utiliza OpenRead() Entonces puedes ver si hay un valor para webClient.ResponseHeaders["content-disposition"] y analizar la parte del nombre de archivo = "blah.blah".

Sin embargo, la gran mayoría de las transmisiones en la web no tienen información del nombre de archivo, y cuando se envía, es posible que desee reescribir la extensión del archivo en función del tipo de contenido para que la extensión del archivo coincida con la asignación de la máquina es ser guardado para.

Otros consejos

Esto no es directamente posible porque WebClient Ofrece funcionalidad de alto nivel que no se presta demasiado bien a tales escenarios.

Hay varios enfoques que podría adoptar, pero todos requieren cambios de un tipo u otro. Aquí hay una pareja:

  1. Puede dividir la funcionalidad en dos partes: haga una llamada (por ejemplo, con DownloadString) que le dice si hay una actualización y cuál es su nombre, después llamar DownloadFile Para obtener la actualización en sí, conociendo el nombre.
  2. Renunciar a la comodidad de DownloadFile y manejar la solicitud HTTP en un nivel inferior; Haga esto para que pueda leer los encabezados de respuesta HTTP y agregar un encabezado (puede ser cualquier cosa, incluso puede inventar uno como EG X-Save-Filename:) Eso le dice cuál debería ser el nombre de archivo.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top