Gibt es eine Klasse, eine Bibliothek oder einen Code, mit dem ich Dateien mit HTTPWebrequest hochladen kann ?
Bearbeiten 2:
Ich möchte nicht in einen WebDAV-Ordner oder ähnliches hochladen. Ich möchte einen Browser simulieren, so wie Sie Ihren Avatar in ein Forum hochladen oder eine Datei über ein Formular in einer Webanwendung hochladen. In ein Formular hochladen, das mehrteilige / Formulardaten verwendet.
Bearbeiten:
WebClient deckt meine Anforderungen nicht ab, daher suche ich nach einer Lösung mit HTTPWebrequest .
.net
upload
httpwebrequest
DR. böse
quelle
quelle
Antworten:
Habe den obigen Code übernommen und behoben, da er den internen Serverfehler 500 auslöst. Es gibt einige Probleme mit \ r \ n schlecht positionierten und Leerzeichen usw. Das Refactoring mit Speicherstrom wurde angewendet und direkt in den Anforderungsstrom geschrieben. Hier ist das Ergebnis:
und Beispielnutzung:
Es kann erweitert werden, um mehrere Dateien zu verarbeiten, oder es für jede Datei einfach mehrmals aufrufen. Es passt jedoch zu Ihren Bedürfnissen.
quelle
"\r\n--" + boundary + "--\r\n"
Andernfalls werden die zusätzlichen Dateien abgeschnitten.Ich habe nach so etwas gesucht. Gefunden in: http://bytes.com/groups/net-c/268661-how-upload-file-via-c-code (aus Gründen der Richtigkeit geändert):
quelle
UPDATE: Mit .NET 4.5 (oder .NET 4.0 durch Hinzufügen des Microsoft.Net.Http- Pakets von NuGet) ist dies ohne externen Code, Erweiterungen und HTTP-Manipulation auf "niedriger Ebene" möglich. Hier ist ein Beispiel:
quelle
In meinen häufig gestellten Fragen zum Hochladen von ASP.NET finden Sie einen Artikel mit Beispielcode: Hochladen von Dateien mithilfe einer RFC 1867-POST-Anforderung mit HttpWebRequest / WebClient . Dieser Code lädt keine Dateien in den Speicher (im Gegensatz zum obigen Code), unterstützt mehrere Dateien und unterstützt Formularwerte, das Festlegen von Anmeldeinformationen und Cookies usw.
Bearbeiten: Axosoft hat die Seite anscheinend entfernt. Danke Leute.
Es ist weiterhin über archive.org zugänglich.
quelle
Basierend auf dem oben angegebenen Code habe ich Unterstützung für mehrere Dateien hinzugefügt und auch einen Stream direkt hochgeladen, ohne dass eine lokale Datei erforderlich ist.
Gehen Sie wie folgt vor, um Dateien auf eine bestimmte URL einschließlich einiger Post-Parameter hochzuladen:
Um dies noch weiter zu verbessern, könnte man den Namen und den MIME-Typ aus der angegebenen Datei selbst bestimmen.
quelle
so etwas ist nah: (ungetesteter Code)
quelle
Ich denke, Sie suchen eher nach WebClient .
Insbesondere UploadFile () .
quelle
Nahm das oben genannte und modifizierte es akzeptiert einige Header-Werte und mehrere Dateien
quelle
\r\n--" + boundary + "--\r\n
VB-Beispiel (konvertiert von C # -Beispiel in einem anderen Beitrag):
quelle
Ich musste mich kürzlich damit befassen - eine andere Möglichkeit, dies zu erreichen, besteht darin, die Tatsache zu nutzen, dass WebClient vererbbar ist, und die zugrunde liegende WebRequest von dort aus zu ändern:
http://msdn.microsoft.com/en-us/library/system.net.webclient.getwebrequest(VS.80).aspx
Ich bevorzuge C #, aber wenn Sie mit VB nicht weiterkommen, sehen die Ergebnisse ungefähr so aus:
quelle
Es gibt ein weiteres Arbeitsbeispiel mit einigen meiner Kommentare:
Und es gibt ein Beispiel für die Verwendung von:
quelle
Ich wollte eine Datei hochladen und einige Parameter zu einer mehrteiligen / Formulardatenanforderung in VB.NET hinzufügen und nicht über einen regulären Formularbeitrag. Dank der Antwort von @JoshCodes habe ich die Richtung erhalten, nach der ich gesucht habe. Ich veröffentliche meine Lösung, um anderen zu helfen, einen Weg zu finden, einen Beitrag sowohl mit Datei als auch mit Parametern durchzuführen. Das HTML-Äquivalent zu dem, was ich erreichen möchte, ist: HTML
Aufgrund der Tatsache, dass ich den apiKey und die Signatur (eine berechnete Prüfsumme der Anforderungsparameter und der verketteten Zeichenfolge des API-Schlüssels) bereitstellen muss, musste ich dies serverseitig tun. Der andere Grund, warum ich es serverseitig tun musste, ist die Tatsache, dass der Beitrag der Datei jederzeit ausgeführt werden kann, indem auf eine Datei verwiesen wird, die sich bereits auf dem Server befindet (unter Angabe des Pfads), sodass während des Formulars keine manuell ausgewählte Datei vorhanden ist Die Post-Form-Datendatei würde den Dateistream nicht enthalten. Andernfalls hätte ich die Prüfsumme über einen Ajax-Rückruf berechnen und die Datei über den HTML-Post mit JQuery senden können. Ich verwende .net Version 4.0 und kann in der aktuellen Lösung kein Upgrade auf 4.5 durchführen. Also musste ich Microsoft.Net.Http mit nuget cmd installieren
quelle
Der @ ChristianRomanescu-Code wurde geändert, um mit dem Speicherstrom zu arbeiten, die Datei als Byte-Array zu akzeptieren, null nvc zuzulassen, die Anforderungsantwort zurückzugeben und mit dem Authorization-Header zu arbeiten. Testete den Code mit Web Api 2.
Testcode:
quelle
Für mich, die folgenden Arbeiten (meistens inspiriert von allen folgenden Antworten), ging ich von Elads Antwort aus und modifizierte / vereinfachte Dinge, um sie meinen Bedürfnissen anzupassen (entfernen Sie keine Eingaben von Dateiformaten, nur eine Datei, ...).
Hoffe es kann jemandem helfen :)
(PS: Ich weiß, dass die Ausnahmebehandlung nicht implementiert ist und davon ausgegangen wird, dass sie in einer Klasse geschrieben wurde, sodass ich möglicherweise einige Integrationsanstrengungen benötige ...)
quelle
Ich bin mir nicht sicher, ob dies zuvor gepostet wurde, aber ich habe es mit WebClient zum Laufen gebracht. Ich habe die Dokumentation für den WebClient gelesen. Ein wichtiger Punkt, den sie machen, ist
Alles, was ich getan habe, war wc.QueryString.Add ("source", generateImage), um die verschiedenen Abfrageparameter hinzuzufügen, und irgendwie stimmt es mit dem Eigenschaftsnamen mit dem Bild überein, das ich hochgeladen habe. Ich hoffe es hilft
quelle
Ich habe vor langer Zeit eine Klasse mit WebClient geschrieben, als ich mehrteilige Formulare hochgeladen habe.
http://ferozedaud.blogspot.com/2010/03/multipart-form-upload-helper.html
Dies funktioniert mit allen Versionen des .NET Frameworks.
quelle
Ich kann die Beispiele nie richtig zum Laufen bringen. Beim Senden an den Server wird immer ein Fehler von 500 angezeigt.
Allerdings bin ich in dieser URL auf eine sehr elegante Methode gestoßen
Es ist leicht erweiterbar und funktioniert offensichtlich sowohl mit Binärdateien als auch mit XML.
Sie nennen es etwas Ähnliches
quelle
Überprüfen Sie die MyToolkit-Bibliothek:
http://mytoolkit.codeplex.com/wikipage?title=Http
quelle
Der Client verwendet die Option "Datei konvertieren"
ToBase64String
, nachdem er "XML" verwendet hat, um den Serveraufruf zu veröffentlichenFile.WriteAllBytes(path,Convert.FromBase64String(dataFile_Client_sent))
.Viel Glück!
quelle
Diese Methode funktioniert zum gleichzeitigen Hochladen mehrerer Bilder
quelle
Mir ist klar, dass dies wahrscheinlich sehr spät ist, aber ich habe nach der gleichen Lösung gesucht. Ich habe die folgende Antwort von einem Microsoft-Mitarbeiter gefunden
quelle