conseguir un responseLength para un HttpWebRequest subir desde otra WebFile para transmitir a la carga cuando la fuente no implementa ContentLength?

StackOverflow https://stackoverflow.com/questions/1865326

Pregunta

Fondo - Estoy tratando de transmitir una página web existente para una aplicación web independiente, utilizando HttpWebRequest / HttpWebResponse en C #. Una cuestión que estoy llama la atención es que estoy tratando de establecer la solicitud de carga de archivos de longitud de contenido usando longitud de contenido del archivo de descarga, sin embargo, la cuestión parece ser que la página web es la fuente en un servidor web para los que no lo hace el HttpWebResponse proporcionar una longitud de contenido.

HttpWebRequest downloadRequest = WebRequest.Create(new Uri("downloaduri")) as HttpWebRequest;
 using (HttpWebResponse downloadResponse = downloadRequest.GetResponse() as HttpWebResponse)
 {
   var uploadRequest = (HttpWebRequest) WebRequest.Create(new Uri("uripath"));
   uploadRequest.Method = "POST";
   uploadRequest.ContentLength = downloadResponse.ContentLength;  // ####

PREGUNTA : ¿Cómo podría actualizar este enfoque para hacer frente a este caso (cuando la respuesta descarga no se tiene un conjunto de longitud de contenido). ¿Sería utilizar de alguna manera una MemoryStream tal vez? Cualquier código de ejemplo sería apreciada.

¿Fue útil?

Solución

Si usted es feliz para descargar la respuesta del otro servidor web por completo, que de hecho hacer la vida más fácil. Sólo tiene que escribir varias veces en una MemoryStream como usted lo trae desde el primer servidor web, entonces usted sabe la longitud establecer para la segunda solicitud y se puede escribir los datos en la facilidad (sobre todo porque tiene un MemoryStream método WriteTo a escribir su contenido a otra corriente).

La desventaja de esto es que usted va a tomar una gran cantidad de memoria si es un archivo de gran tamaño. Es que probable que sea un problema en su situación? Las alternativas incluyen:

  • Escribir en un archivo en lugar de utilizar un MemoryStream. Tendrá que limpiar el archivo después, por supuesto - que está básicamente utilizando el sistema de archivos como memoria más grande:)
  • Uso de una codificación de transferencia fragmentada de "leer un trozo, un trozo escribir"; este puede ser incómoda para hacerlo bien -. ciertamente no es algo que he hecho antes
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top