¿Hay alguna clase, biblioteca o algún código que me ayude a cargar archivos con HTTPWebrequest ?
Edición 2:
No quiero subir a una carpeta WebDAV o algo así. Quiero simular un navegador, así que al igual que sube su avatar a un foro o sube un archivo a través del formulario en una aplicación web. Subir a un formulario que utiliza un multipart / form-data.
Editar:
WebClient no cubre mis requisitos, por lo que estoy buscando una solución con HTTPWebrequest .
.net
upload
httpwebrequest
Dr. mal
fuente
fuente
Respuestas:
Tomó el código anterior y lo arregló porque arroja el Error interno del servidor 500. Hay algunos problemas con \ r \ n mal posicionados y espacios, etc. Aplica la refactorización con flujo de memoria, escribiendo directamente en el flujo de solicitud. Aquí está el resultado:
y uso de la muestra:
Podría extenderse para manejar múltiples archivos o simplemente llamarlo varias veces para cada archivo. Sin embargo, se adapta a tus necesidades.
fuente
"\r\n--" + boundary + "--\r\n"
contrario, los archivos adicionales se cortarán.Estaba buscando algo como esto, Encontrado en: http://bytes.com/groups/net-c/268661-how-upload-file-via-c-code (modificado para su corrección):
fuente
ACTUALIZACIÓN: el uso de .NET 4.5 (o .NET 4.0 agregando el paquete Microsoft.Net.Http de NuGet) es posible sin código externo, extensiones y manipulación HTTP de "bajo nivel". Aquí hay un ejemplo:
fuente
Mi FAQ de carga de ASP.NET tiene un artículo sobre esto, con código de ejemplo: Cargue archivos usando una solicitud POST RFC 1867 con HttpWebRequest / WebClient . Este código no carga archivos en la memoria (a diferencia del código anterior), admite múltiples archivos y admite valores de formulario, configuración de credenciales y cookies, etc.
Editar: parece que Axosoft eliminó la página. Gracias chicos.
Todavía es accesible a través de archive.org.
fuente
Según el código proporcionado anteriormente, agregué soporte para múltiples archivos y también cargué una transmisión directamente sin la necesidad de tener un archivo local.
Para cargar archivos a una URL específica, incluidos algunos parámetros de publicación, haga lo siguiente:
Para mejorar esto aún más, se podría determinar el nombre y el tipo MIME a partir del archivo dado.
fuente
algo como esto está cerca: (código no probado)
fuente
Creo que estás buscando algo más como WebClient .
Específicamente, UploadFile () .
fuente
Tomó lo anterior y lo modificó, acepta algunos valores de encabezado y varios archivos
fuente
\r\n--" + boundary + "--\r\n
Ejemplo de VB (convertido de ejemplo de C # en otra publicación):
fuente
Tuve que lidiar con esto recientemente; otra forma de abordarlo es usar el hecho de que WebClient es heredable y cambiar la solicitud web subyacente desde allí:
http://msdn.microsoft.com/en-us/library/system.net.webclient.getwebrequest(VS.80).aspx
Prefiero C #, pero si estás atrapado con VB, los resultados se verán así:
fuente
Hay otro ejemplo de trabajo con algunos de mis comentarios:
Y hay un ejemplo de uso:
fuente
Estaba buscando cargar archivos y agregar algunos parámetros a una solicitud multiparte / datos de formulario en VB.NET y no a través de una publicación de formularios regular. Gracias a la respuesta de @JoshCodes obtuve la dirección que estaba buscando. Estoy publicando mi solución para ayudar a otros a encontrar una manera de realizar una publicación con archivos y parámetros, el equivalente html de lo que intento lograr es: html
Debido al hecho de que tengo que proporcionar la apiKey y la firma (que es una suma de comprobación calculada de los parámetros de solicitud y la cadena concatenada de la clave api), necesitaba hacerlo en el lado del servidor. La otra razón por la que necesitaba hacerlo del lado del servidor es el hecho de que la publicación del archivo se puede realizar en cualquier momento apuntando a un archivo que ya está en el servidor (proporcionando la ruta), por lo que no habría un archivo seleccionado manualmente durante el formulario por lo tanto, el archivo de datos del formulario no contendría la secuencia del archivo. De lo contrario, podría haber calculado la suma de verificación a través de una devolución de llamada ajax y enviado el archivo a través de la publicación html usando JQuery. Estoy usando .net versión 4.0 y no puedo actualizar a 4.5 en la solución real. Así que tuve que instalar Microsoft.Net.Http usando nuget cmd
fuente
Se modificó el código @CristianRomanescu para que funcione con la secuencia de memoria, acepte el archivo como una matriz de bytes, permita nvc nulo, responda a la solicitud de devolución y trabaje con el encabezado de autorización. Probé el código con Web Api 2.
Código de prueba:
fuente
Para mí, los siguientes trabajos (inspirados principalmente en todas las respuestas siguientes), comencé a partir de la respuesta de Elad y modifiqué / simplifiqué las cosas para que se ajustaran a mis necesidades (eliminar no entradas de formulario de archivo, solo un archivo, ...).
Espero que pueda ayudar a alguien :)
(PD: Sé que el manejo de excepciones no está implementado y supone que se escribió dentro de una clase, por lo que es posible que necesite un esfuerzo de integración ...)
fuente
No estoy seguro de si esto se publicó antes, pero lo conseguí trabajando con WebClient. Leí la documentación para el WebClient. Un punto clave que hacen es
Entonces, todo lo que hice fue wc.QueryString.Add ("source", generateImage) para agregar los diferentes parámetros de consulta y de alguna manera coincide con el nombre de la propiedad con la imagen que cargué. Espero eso ayude
fuente
Escribí una clase usando WebClient cuando hacía la carga de formularios multiparte.
http://ferozedaud.blogspot.com/2010/03/multipart-form-upload-helper.html
Esto funcionará con todas las versiones del marco .NET.
fuente
Nunca puedo hacer que los ejemplos funcionen correctamente, siempre recibo un error 500 cuando lo envío al servidor.
Sin embargo, encontré un método muy elegante para hacerlo en esta url
Es fácilmente extensible y obviamente funciona con archivos binarios y XML.
Lo llamas usando algo similar a esto
fuente
Echa un vistazo a la biblioteca MyToolkit:
http://mytoolkit.codeplex.com/wikipage?title=Http
fuente
El uso del cliente convierte el archivo a
ToBase64String
, después de usar Xml para promulgar la llamada al servidor, el uso de este servidorFile.WriteAllBytes(path,Convert.FromBase64String(dataFile_Client_sent))
.¡Buena suerte!
fuente
Este método funciona para cargar múltiples imágenes simultáneamente
fuente
Me doy cuenta de que esto probablemente sea muy tarde, pero estaba buscando la misma solución. Encontré la siguiente respuesta de un representante de Microsoft
fuente