Binärdaten posten (Anwendung/Oktett-Stream)
Ich möchte eine Datei hochladen, deren Inhaltstyp auf application/octet-stream eingestellt ist und die Binärdaten der Datei im Anforderungstext enthalten sind. Wie würde ich das in Golang machen? Hier ist mein Startcode:
package main import ( "fmt" "log" "net/http" "net/http/httputil" "os" ) func main() { file, err := os.Open("file.pdf") if err != nil { log.Fatalln(err) } req, err := http.NewRequest("POST", fmt.Sprintf("https://example.com/upload"), nil) req.Header.Add("Content-Type", "application/octet-stream") if err != nil { log.Fatalln(err) } client := &http.Client{ Transport: &http.Transport{ DisableCompression: true, }, } resp, err := client.Do(req) if err != nil { log.Fatalln(err) } defer resp.Body.Close() reqDump, err := httputil.DumpRequest(req, true) if err != nil { log.Fatalln(err) } fmt.Println(reqDump) }
Richtige Antwort
Ich habe eine Antwort zusammengestellt, die Ihnen bei der Lösung Ihres Problems helfen kann. Der gesamte Code gehört zu main.go
文件,只是为了演示。它有两个主要部分:handler
和 main
Funktionen. Beginnen wir mit dem Handler.
http-Handler
func handlefile(w http.responsewriter, r *http.request) { if r.method != http.methodpost { w.writeheader(http.statusmethodnotallowed) return } fmt.println("handlefile") data, err := io.readall(r.body) if err != nil { panic(err) } defer r.body.close() w.write(data) }
Hier verlasse ich mich einfach auf das, was Sie verwenden (nur Standardbibliothek: http
、io
和fmt
Paket). Wir müssen lediglich die eingehende Nutzlast, die von der http-Anfrage gelesen wurde, in den Antwortstream schreiben.
Hauptfunktionen
func main() { r := http.NewServeMux() r.HandleFunc("/example", HandleFile) srv := http.Server{ Addr: ":8000", Handler: r, } var wg sync.WaitGroup wg.Add(1) go func() { defer wg.Done() if err := srv.ListenAndServe(); err != nil { fmt.Println(err.Error()) } }() file, err := os.Open("file.txt") if err != nil { panic(err) } defer file.Close() req, err := http.NewRequest(http.MethodPost, "http://localhost:8000/example", file) if err != nil { panic(err) } req.Header.Set("Content-Type", "application/octet-stream") client := &http.Client{ Transport: &http.Transport{ DisableCompression: true, }, } res, err := client.Do(req) if err != nil { panic(err) } defer res.Body.Close() data, err := io.ReadAll(res.Body) if err != nil { panic(err) } fmt.Println(string(data)) srv.Shutdown(context.Background()) wg.Wait() }
Im Gegensatz dazu müssen main
Funktionen mit mehr Logik umgehen. Schauen wir sie uns in der Liste an:
- Es erstellt einen http-Server zur Bearbeitung eingehender Anfragen. Wir instrumentieren es für Anfragen mithilfe des
handlefile
处理程序来回复针对/example
-Endpunkts, den wir zuvor erstellt haben. - Wir verwenden
sync.waitgroup
, um den Server in einer separaten Goroutine auszuführen. Dadurch ist der Server betriebsbereit, wir können jedoch unser Programm fortsetzen und darin http-Anfragen senden. - Wir bereiten eine http-Anfrage mit den aus dem lokalen Dateisystem gelesenen Dateiinhalten vor (in unserem Fall die
file.txt
)。我们将content-type
标头设置为application/octet-stream
并将文件句柄传递给newrequest
-Funktion. - Wir stellen eine Anfrage und drucken den Inhalt der HTTP-Antwortnutzlast aus.
- Wir fahren den Server herunter und verwenden die
wg.wait
-Methode, um die Wartegruppe anzuweisen, auf alle Goroutinen zu warten.
Abschließende Überlegungen
Der hier geschriebene Code kann definitiv verbessert werden. Wie auch immer, nur zur Veranschaulichung, ich halte es lieber so nah wie möglich an der Originaldatei, um Ihnen ein besseres Verständnis dafür zu vermitteln, wie man Binärdateien auf einem http-Server veröffentlicht und wie man dasselbe Programm sowohl auf dem Client als auch auf dem Server ausführt. Wenn etwas unklar ist, sagen Sie es mir bitte, danke!
Das obige ist der detaillierte Inhalt vonBinärdaten posten (Anwendung/Oktett-Stream). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Es gibt zwei Möglichkeiten, absolute Werte in C++ zu erhalten: 1. Verwenden Sie die integrierte Funktion abs(), um den absoluten Wert eines Ganzzahl- oder Gleitkommatyps zu erhalten. 2. Verwenden Sie die generische Funktion std::abs(), um Erhalten Sie verschiedene unterstützte absolute Werte. Arbeitet mit absoluten Werten von Datentypen.

std ist der Namespace in C++, der Komponenten der Standardbibliothek enthält. Um std zu verwenden, verwenden Sie die Anweisung „using namespace std;“. Die direkte Verwendung von Symbolen aus dem std-Namespace kann Ihren Code vereinfachen, wird jedoch nur bei Bedarf empfohlen, um eine Verschmutzung des Namespace zu vermeiden.

prime ist ein Schlüsselwort in C++, das den Primzahltyp angibt, der nur durch 1 geteilt werden kann. Es wird als boolescher Typ verwendet, um anzugeben, ob der angegebene Wert eine Primzahl ist wahr, andernfalls ist es falsch.

Der komplexe Typ wird zur Darstellung komplexer Zahlen in der C-Sprache verwendet, einschließlich Real- und Imaginärteilen. Seine Initialisierungsform ist complex_number = 3.14 + 2.71i, auf den Realteil kann über creal(complex_number) und auf den Imaginärteil über cimag(complex_number) zugegriffen werden. Dieser Typ unterstützt gängige mathematische Operationen wie Addition, Subtraktion, Multiplikation, Division und Modulo. Darüber hinaus wird eine Reihe von Funktionen zum Arbeiten mit komplexen Zahlen bereitgestellt, z. B. cpow, csqrt, cexp und csin.

Die Funktion fabs() ist eine mathematische Funktion in C++, die den absoluten Wert einer Gleitkommazahl berechnet, das negative Vorzeichen entfernt und einen positiven Wert zurückgibt. Es akzeptiert einen Gleitkommaparameter und gibt einen absoluten Wert vom Typ Double zurück. Fabs(-5.5) gibt beispielsweise 5,5 zurück. Diese Funktion arbeitet mit Gleitkommazahlen, deren Genauigkeit von der zugrunde liegenden Hardware beeinflusst wird.

Config stellt Konfigurationsinformationen in Java dar und wird zum Anpassen des Anwendungsverhaltens verwendet. Es wird normalerweise in externen Dateien oder Datenbanken gespeichert und kann über Java Properties, PropertyResourceBundle oder Bibliotheken von Drittanbietern verwaltet werden. Umweltbewusstsein, Handhabbarkeit, Skalierbarkeit.

Die min-Funktion in C++ gibt das Minimum mehrerer Werte zurück. Die Syntax lautet: min(a, b), wobei a und b die zu vergleichenden Werte sind. Sie können auch eine Vergleichsfunktion angeben, um Typen zu unterstützen, die den <-Operator nicht unterstützen. C++20 hat die Funktion std::clamp eingeführt, die mindestens drei oder mehr Werte verarbeitet.

Es gibt drei Möglichkeiten, den Absolutwert in C++ zu ermitteln: Mit der Funktion abs() können Sie den Absolutwert jeder Art von Zahl berechnen. Mit der Funktion std::abs() können Sie den Absolutwert von Ganzzahlen, Gleitkommazahlen und komplexen Zahlen berechnen. Manuelle Berechnung absoluter Werte, geeignet für einfache ganze Zahlen.
