Heim > Artikel > Backend-Entwicklung > Verwenden Sie Content-Type multipart/form-data, um Daten zu veröffentlichen
Der PHP-Editor Strawberry zeigt Ihnen, wie Sie Content-Type-Multipart-/Formulardaten zum Veröffentlichen von Daten verwenden. Bei der Webentwicklung müssen wir häufig Dateien hochladen oder Formulardaten übermitteln. Diese Funktion kann mithilfe von Content-Type-Multipart-/Formulardaten erreicht werden, einem häufig verwendeten Datenübertragungsformat. Durch die Verwendung dieses Formats können wir Dateien und Formulardaten problemlos gemeinsam hochladen und übermitteln. In diesem Artikel wird detailliert beschrieben, wie Content-Type-Multipart-/Formulardaten zum Veröffentlichen von Daten verwendet werden und welche Vorsichtsmaßnahmen für deren Verwendung zu beachten sind. Lasst uns gemeinsam lernen!
Ich versuche, mit go ein Bild von meinem Computer auf eine Website hochzuladen. Normalerweise verwende ich ein Bash-Skript, um die Datei und den Schlüssel an den Server zu senden:
curl -F "image"=@"IMAGEFILE" -F "key"="KEY" URL
Es funktioniert gut, aber ich versuche, diese Anfrage in mein Golang-Programm umzuwandeln.
http://matt.aimonetti.net/posts/2013/07/01/golang-multipart-file-upload-example/
Ich habe diesen Link und viele andere ausprobiert, aber bei jedem Code, den ich ausprobiert habe, war die Antwort vom Server „Kein Bild gesendet“ und ich weiß nicht warum. Wenn jemand weiß, was im obigen Beispiel los ist.
Hier ist ein Beispielcode.
Kurz gesagt, Sie müssen das mime/multipart
Paket verwenden, um die Tabelle zu erstellen.
package main import ( "bytes" "fmt" "io" "mime/multipart" "net/http" "net/http/httptest" "net/http/httputil" "os" "strings" ) func main() { var client *http.Client var remoteURL string { //setup a mocked http client. ts := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { b, err := httputil.DumpRequest(r, true) if err != nil { panic(err) } fmt.Printf("%s", b) })) defer ts.Close() client = ts.Client() remoteURL = ts.URL } //prepare the reader instances to encode values := map[string]io.Reader{ "file": mustOpen("main.go"), // lets assume its this file "other": strings.NewReader("hello world!"), } err := Upload(client, remoteURL, values) if err != nil { panic(err) } } func Upload(client *http.Client, url string, values map[string]io.Reader) (err error) { // Prepare a form that you will submit to that URL. var b bytes.Buffer w := multipart.NewWriter(&b) for key, r := range values { var fw io.Writer if x, ok := r.(io.Closer); ok { defer x.Close() } // Add an image file if x, ok := r.(*os.File); ok { if fw, err = w.CreateFormFile(key, x.Name()); err != nil { return } } else { // Add other fields if fw, err = w.CreateFormField(key); err != nil { return } } if _, err = io.Copy(fw, r); err != nil { return err } } // Don't forget to close the multipart writer. // If you don't close it, your request will be missing the terminating boundary. w.Close() // Now that you have a form, you can submit it to your handler. req, err := http.NewRequest("POST", url, &b) if err != nil { return } // Don't forget to set the content type, this will contain the boundary. req.Header.Set("Content-Type", w.FormDataContentType()) // Submit the request res, err := client.Do(req) if err != nil { return } // Check the response if res.StatusCode != http.StatusOK { err = fmt.Errorf("bad status: %s", res.Status) } return } func mustOpen(f string) *os.File { r, err := os.Open(f) if err != nil { panic(err) } return r }
Das obige ist der detaillierte Inhalt vonVerwenden Sie Content-Type multipart/form-data, um Daten zu veröffentlichen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!