Télécharger des fichiers avec HTTPWebrequest (multipart/form-data)
Est-il de toute la classe, une bibliothèque ou un morceau de code qui me permettra de télécharger des fichiers avec HTTPWebrequest?
Edit 2:
Je ne veux pas de télécharger un dossier WebDAV ou quelque chose comme ça. Je veux simuler un navigateur, tout comme le téléchargement de votre avatar pour un forum ou télécharger un fichier via un formulaire dans une application web. Télécharger un formulaire qui utilise un multipart/form-data.
Edit:
WebClient est pas à couvrir mes besoins, donc je suis à la recherche d'une solution avec HTTPWebrequest.
- Voici un excellent billet de blog à ce sujet - paraesthesia.com/archive/2009/12/16/...
- Cela a vraiment fonctionné pour moi contrairement aux autres réponses ici. J'ai juste eu à ajouter mes cookies.
- Si vous êtes en utilisant .NET >= 4.0, puis voir cette réponse pour une solution qui ne nécessite pas d'objets personnalisés.
Vous devez vous connecter pour publier un commentaire.
Pris le code ci-dessus et corrigé, car il jette Erreur de Serveur Interne 500. Il y a quelques problèmes avec \r\n mal placé et espaces etc. Appliquer le refactoring avec les flux de mémoire, écrire directement à la demande de flux. Voici le résultat:
et d'exemples d'utilisation:
Il pourrait être étendu à gérer plusieurs fichiers ou tout simplement l'appeler plusieurs fois pour chaque fichier. Toutefois, il s'adapte à vos besoins.
"\r\n--" + boundary + "--\r\n"
Sinon les fichiers supplémentaires seront coupés.name=\"{0}\"
partie. Ce travail sera si j'ai une chaîne de caractères avec des citations en elle. Exemple<input name='string"with"quotes' />
Toutefois partie du nom est normalement simple et rarement avec des guillemets. Donc, pour la plupart scénario normal, il n'y aura aucun problème.Je cherchais quelque chose comme cela, Trouvé dans :
http://bytes.com/groups/net-c/268661-how-upload-file-via-c-code (modifié pour la correction):
NameValueCollection nvc
est pour ajouter d'autres valeurs pour la forme, outre les fichiers téléchargés.Mise à JOUR: à l'Aide .NET 4.5 (ou .NET 4.0 par l'ajout de la Microsoft.Net.Http paquet de NuGet) c'est possible sans code externe, d'extensions et de "bas niveau" HTTP manipulation. Voici un exemple:
"/"file1/""
Mon ASP.NET Télécharger la FAQ a un article sur ce sujet, avec des exemples de code: Télécharger des fichiers à l'aide d'un RFC 1867 requête POST avec HttpWebRequest/WebClient. Ce code ne prend pas en charge les fichiers dans la mémoire (par opposition au code ci-dessus), prend en charge plusieurs fichiers, et prend en charge les valeurs d'un formulaire, définition des informations d'identification et les cookies, etc.
Edit: ressemble Axosoft a pris en bas de la page. Merci les gars.
Il est toujours accessible via archive.org.
http://slickupload.com/
Basé sur le code fourni ci-dessus, j'ai ajouté le support pour de multiples fichiers et de téléchargement d'un flux directement, sans la nécessité d'avoir un fichier local.
De télécharger des fichiers vers une url spécifique, y compris certains post params procédez de la manière suivante:
Pour améliorer encore plus l'on pouvait déterminer le nom et le type mime du fichier lui-même.
quelque chose comme ce qui est proche: (code non testé)
A pris le dessus et l'a modifié accepter certaines valeurs d'en-tête, et plusieurs fichiers
\r\n--" + boundary + "--\r\n
Je pense que vous êtes à la recherche de quelque chose de plus comme WebClient.
Plus précisément, UploadFile().
Exemple VB (convertie à partir d'exemple en C# sur un autre post):
J'ai eu à traiter avec cette récemment une autre approche consiste à utiliser le fait que WebClient est héréditaire, et de modifier le sous-jacent WebRequest à partir de là:
http://msdn.microsoft.com/en-us/library/system.net.webclient.getwebrequest(SV.80).aspx
Je préfère le C#, mais si vous êtes coincé avec VB le résultat devrait ressembler à quelque chose comme ceci:
Il est un autre exemple de travail avec certains de mes commentaires :
Et il est un exemple de l'aide :
Je cherchais à faire d'upload de fichier et ajouter des paramètres à une multipart/form-data demande VB.NET et non pas au moyen de formes régulières post.
Grâce à @JoshCodes réponse que j'ai obtenu à la direction que je cherchais.
Je vous poste ma solution pour aider les autres à trouver un moyen de faire un post avec les deux fichiers et de paramètres
le html équivalent de ce que je cherche est :
html
En raison du fait que je dois fournir le apiKey et la signature (qui est calculé de la somme de contrôle des paramètres de la requête et de la clé api chaîne concaténée), je devais le faire côté serveur.
L'autre raison, je devais le faire côté serveur, c'est le fait que le poste de fichier peut être effectué à tout moment en pointant sur un fichier déjà sur le serveur (à condition que le chemin d'accès), donc il n'y aurait pas manuellement le fichier sélectionné pendant le post de formulaire ainsi la forme de fichier de données ne contient pas les flux de fichier.Sinon, je pourrais avoir calculé la somme de contrôle via une requête ajax de rappel et envoyé le fichier par le biais du code html de poste à l'aide de JQuery.
Je suis à l'aide .net version 4.0 et ne peuvent pas passer à 4,5 dans la solution réelle. J'ai donc dû installer le Microsoft.Net.Http à l'aide de nuget cmd
Modifié @CristianRomanescu code pour travailler avec des flux de mémoire, accepter de fichier comme un tableau d'octets, autoriser les valeurs null de la cnv, de la demande de retour de réponse et de travailler avec l'Autorisation de l'en-tête. Testé le code avec l'Api Web 2.
Testcode:
Ne sais pas si cela a été posté avant mais j'ai eu ce travail avec WebClient. j'ai lu la documentation pour le client web. Un point clé est
Donc j'ai tout était wc.QueryString.Add("source", generatedImage) d'ajouter les différents paramètres de la requête et en quelque sorte il correspond au nom de la propriété avec l'image que j'ai téléchargé. Espérons que cela aide
J'ai écrit une classe à l'aide WebClient chemin du retour quand le faire en plusieurs parties formulaire de téléchargement.
http://ferozedaud.blogspot.com/2010/03/multipart-form-upload-helper.html
Cela fonctionne avec toutes les versions de la .NET framework.
Je ne peux jamais obtenir les exemples de travailler correctement, je reçois toujours une erreur 500 lors de l'envoi au serveur.
Cependant je suis tombé sur un très élégant méthode de le faire dans cette url
Il est facilement extensible, et fonctionne évidemment avec des fichiers binaires et XML.
Vous appeler en utilisant quelque chose de semblable à ce
Pour moi, les ouvrages suivants (surtout inspirated à partir de toutes les réponses ci-après), j'ai commencé par Elad la réponse de modifier ou simplifier les choses pour correspondre à mon besoin (supprimez pas le fichier d'entrées d'un formulaire, d'un seul fichier, ...).
Espère que ça peut aider quelqu'un 🙂
(PS: je sais que la gestion des exceptions n'est pas mis en œuvre et il suppose qu'il a été écrit à l'intérieur d'une classe, donc je peut avoir besoin de certaines effort d'intégration...)
Découvrez la MyToolkit bibliothèque:
http://mytoolkit.codeplex.com/wikipage?title=Http
Client utiliser convertir Fichier à
ToBase64String
, après l'utilisation de Xml pour promulguerà l'appel de Serveur, ce serveur utiliser
File.WriteAllBytes(path,Convert.FromBase64String(dataFile_Client_sent))
.Bonne chance!
Je réalise que c'est sans doute vraiment en retard, mais j'étais à la recherche pour la même solution. J'ai trouvé la réponse suivante à partir d'un Microsoft rep