POST-Daten mit dem Content-Type multipart/form-data
Ich versuche Bilder hochzuladen von meinem computer auf eine website mit gehen. In der Regel nutze ich ein bash-Skript sendet eine Datei und ein key auf den server:
curl -F "image"=@"IMAGEFILE" -F "key"="KEY" URL
funktioniert es einwandfrei, aber ich versuche es zu konvertieren, das verlangen in meinen golang-Programm.
http://matt.aimonetti.net/posts/2013/07/01/golang-multipart-file-upload-example/
Habe ich versucht, diese link und viele andere, aber für jeden code, den ich versuchen, die Antwort vom server wird "kein Bild "gesendet", und ich habe keine Ahnung, warum. Wenn jemand weiß, was mit dem obigen Beispiel.
- Können Sie geben einige Details über deinen server?
- Poste den code, der nicht funktioniert.
- Duplikat von stackoverflow.com/questions/7223616/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier einige Beispiel-code.
Kurz gesagt, Sie müssen verwenden Sie die
mime/multipart
- Paket um die form zu erstellen.w.CreateFormField("key")
nichtw.CreateFormFile("key", file)
form-data; name="data"; filename="%s"
fn) partHeader.Add("Content-Disposition", disp) partHeader.Add("Content-Type", "image/jpeg") Teil, err := writer.CreatePart(partHeader) </pre>Bezüglich attila-o post, die Anfrage-header nicht über die Grenze, da der Schriftsteller ist schon geschlossen.
So, es sollte in der Nähe nach dem fest, denke ich.
func (w *Writer) FormDataContentType() string
nach dem schließen der Schriftsteller, obwohlNachdem Sie zu entschlüsseln, die akzeptierte Antwort auf diese Frage für meine unit-Tests am Ende landete ich mit den Folgen umgestalteten code:
Nun, es sollte ziemlich einfach zu bedienen:
Hier ist eine Funktion habe ich benutzt, verwendet
io.Pipe()
zu Lesen zu vermeiden, in der die gesamte Datei in den Speicher brauchen oder zu verwalten, keine Puffer. Es behandelt nur eine einzelne Datei, sondern kann einfach erweitert werden, um zu handhaben, indem Sie weitere Teile innerhalb der goroutine. Der happy path funktioniert gut. Der Fehler Pfade nicht hand viel testen.Habe ich gefunden dieses tutorial sehr hilfreich, um zu klären, meine Verwirrungen über Datei hochladen Gehen.
Grundsätzlich, laden Sie die Datei über ajax mit
form-data
auf einem client, und verwenden Sie das folgende kleine snippet von Go-code auf dem server:Hier
r
ist*http.Request
. P. S. dieses speichert nur die Datei in den gleichen Ordner und führt keine Sicherheitsprüfungen durchgeführt.