Inhaltsverzeichnis
Richtige Antwort
Heim Backend-Entwicklung Golang Golang verwendet Multipart, um große Dateien auf eine externe API hochzuladen. So vermeiden Sie das Problem „io.Copy(io.Writer, io.Reader)'.

Golang verwendet Multipart, um große Dateien auf eine externe API hochzuladen. So vermeiden Sie das Problem „io.Copy(io.Writer, io.Reader)'.

Feb 06, 2024 am 09:45 AM
api调用

Golang 使用多部分将大文件上传到外部 API。如何避免`io.Copy(io.Writer, io.Reader)`问题

Frageninhalt

Mein Ziel ist es, eine große Datei mithilfe des integrierten Net/http-Pakets von Golang auf POST https://somehost/media hochzuladen.

HTTP-Format für API-Aufruf

POST /media HTTP/1.1
Host: somehost
Content-Length: 434
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW

------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="detail"

More and more detail
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="file"; filename="some_big_video.mp4"
Content-Type: <Content-Type header here>

(data)
------WebKitFormBoundary7MA4YWxkTrZu0gW--
Nach dem Login kopieren

In Golang ist dies der Code.

package main

import (
  "fmt"
  "bytes"
  "mime/multipart"
  "os"
  "path/filepath"
  "io"
  "net/http"
  "io/ioutil"
)

func main() {

  url := "https://somehost/media"
  method := "POST"

  payload := &bytes.Buffer{}
  writer := multipart.NewWriter(payload)
  _ = writer.WriteField("details", "more and more details")
  file, errFile3 := os.Open("/Users/vajahat/Downloads/some_big_video.mp4")
  defer file.Close()
  part3,errFile3 := writer.CreateFormFile("file","some_big_video.mp4") 
  _, errFile3 = io.Copy(part3, file)
  if errFile3 != nil {
    fmt.Println(errFile3)
    return
  }
  err := writer.Close()
  if err != nil {
    fmt.Println(err)
    return
  }
  client := &http.Client {}
  req, err := http.NewRequest(method, url, payload)

  if err != nil {
    fmt.Println(err)
    return
  }

  req.Header.Set("Content-Type", writer.FormDataContentType())
  res, err := client.Do(req)
  if err != nil {
    fmt.Println(err)
    return
  }
  defer res.Body.Close()

  body, err := ioutil.ReadAll(res.Body)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(body))
}
Nach dem Login kopieren

Wie man io.Copy(io.Writer, io.Reader)Probleme

vermeidet

Der obige Code funktioniert gut, aber in der _, errFile3 = io.Copy(part3, file)-Zeile. Dadurch wird im Wesentlichen alles in der Datei in den Hauptspeicher kopiert.

Wie vermeide ich diese Situation?

Gibt es eine Möglichkeit, große Dateien über multipart-formdata an die API zu streamen?

Das Programm wird auf einem Remote-Server ausgeführt. Kann beim Öffnen einer sehr großen Datei abstürzen.


Richtige Antwort


Verwenden Sie io.Pipe und eine Goroutine, um die Datei in die Anfrage zu kopieren, ohne die gesamte Datei in den Speicher zu laden.

pr, pw := io.Pipe()
writer := multipart.NewWriter(pw)
ct := writer.FormDataContentType()
go func() {
    _ = writer.WriteField("details", "more and more details")
    file, err := os.Open("/Users/vajahat/Downloads/some_big_video.mp4")
    if err != nil {
        pw.CloseWithError(err)
        return
    }
    defer file.Close()
    part3, err := writer.CreateFormFile("file", "some_big_video.mp4")
    if err != nil {
        pw.CloseWithError(err)
        return
    }
    _, err = io.Copy(part3, file)
    if err != nil {
        pw.CloseWithError(err)
        return
    }
    pw.CloseWithError(writer.Close())
}()

client := &http.Client{}
req, err := http.NewRequest(method, url, pr)

if err != nil {
    fmt.Println(err)
    return
}

req.Header.Set("Content-Type", ct)
// remaining code as before
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonGolang verwendet Multipart, um große Dateien auf eine externe API hochzuladen. So vermeiden Sie das Problem „io.Copy(io.Writer, io.Reader)'.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Erkundung der Grenzen von Agenten: AgentQuest, ein modulares Benchmark-Framework zur umfassenden Messung und Verbesserung der Leistung großer Sprachmodellagenten Erkundung der Grenzen von Agenten: AgentQuest, ein modulares Benchmark-Framework zur umfassenden Messung und Verbesserung der Leistung großer Sprachmodellagenten Apr 11, 2024 pm 08:52 PM

Basierend auf der kontinuierlichen Optimierung großer Modelle haben LLM-Agenten – diese leistungsstarken algorithmischen Einheiten – das Potenzial gezeigt, komplexe mehrstufige Argumentationsaufgaben zu lösen. Von der Verarbeitung natürlicher Sprache bis hin zum Deep Learning rücken LLM-Agenten nach und nach in den Fokus von Forschung und Industrie. Sie können nicht nur menschliche Sprache verstehen und generieren, sondern auch Strategien formulieren, Aufgaben in verschiedenen Umgebungen ausführen und sogar API-Aufrufe und Codierung zum Erstellen verwenden Lösungen. In diesem Zusammenhang ist die Einführung des AgentQuest-Frameworks ein Meilenstein. Es bietet nicht nur eine modulare Benchmarking-Plattform für die Bewertung und Weiterentwicklung von LLM-Agenten, sondern bietet Forschern auch leistungsstarke Tools, um die Leistung dieser Agenten gleichzeitig zu verfolgen und zu verbessern granularerer Ebene

Wie rufe ich Webdienste und APIs mit PHP auf? Wie rufe ich Webdienste und APIs mit PHP auf? Jun 30, 2023 pm 03:03 PM

So verwenden Sie die Webdienste und API-Aufrufe von PHP Mit der kontinuierlichen Weiterentwicklung der Internettechnologie sind Webdienste und API-Aufrufe zu einem unverzichtbaren Bestandteil für Entwickler geworden. Durch die Verwendung von Webdiensten und API-Aufrufen können wir problemlos mit anderen Anwendungen interagieren, um Daten abzurufen oder bestimmte Funktionen zu implementieren. Als beliebte serverseitige Skriptsprache bietet PHP außerdem eine Fülle von Funktionen und Tools zur Unterstützung der Entwicklung von Webdiensten und API-Aufrufen. In diesem Artikel werde ich kurz die Verwendung von PHP vorstellen

Sehen Sie sich Ihre Litecoin-Wallet-Adresse an Sehen Sie sich Ihre Litecoin-Wallet-Adresse an Apr 07, 2024 pm 05:12 PM

Um die Litecoin-Wallet-Adresse anzuzeigen, besuchen Sie die Litecoin-Wallet und suchen Sie auf der Registerkarte „Empfangen“ nach der Adresse. Sie können auch einen Blockchain-Browser oder einen API-Aufruf verwenden.

Kann von Mingw kompilierte Software in einer Linux-Umgebung verwendet werden? Kann von Mingw kompilierte Software in einer Linux-Umgebung verwendet werden? Mar 20, 2024 pm 05:06 PM

Kann von Mingw kompilierte Software in einer Linux-Umgebung verwendet werden? Mingw ist eine Toolkette, die auf der Windows-Plattform zum Kompilieren und Generieren von Programmen verwendet wird, die unter Windows ausgeführt werden können. Kann die von Mingw kompilierte Software also in der Linux-Umgebung verwendet werden? Die Antwort ist ja, aber es erfordert einige zusätzliche Arbeiten und Schritte. Die gebräuchlichste Möglichkeit, unter Windows kompilierte Programme unter Linux auszuführen, ist die Verwendung von Wine. Wine ist ein Tool, das in Linux und anderen ähnlichen Un verwendet wird

Lass Siri nicht länger geistig zurückgeblieben sein! Apple definiert ein neues geräteseitiges Modell, das „viel besser als GPT-4' ist. Es verzichtet auf Text und simuliert Bildschirminformationen immer noch 5 % besser als das Basissystem. Lass Siri nicht länger geistig zurückgeblieben sein! Apple definiert ein neues geräteseitiges Modell, das „viel besser als GPT-4' ist. Es verzichtet auf Text und simuliert Bildschirminformationen immer noch 5 % besser als das Basissystem. Apr 02, 2024 pm 09:20 PM

Geschrieben von Noah |. 51CTO Technology Stack (WeChat ID: blog51cto) Siri, die von Nutzern immer als „etwas geistig zurückgeblieben“ kritisiert wird, kann gerettet werden! Siri gehört seit seiner Geburt zu den Vertretern auf dem Gebiet der intelligenten Sprachassistenten, doch seine Leistung ist seit langem unbefriedigend. Allerdings wird erwartet, dass die neuesten Forschungsergebnisse des Apple-Teams für künstliche Intelligenz den Status quo deutlich verändern werden. Diese Ergebnisse sind aufregend und wecken große Erwartungen für die Zukunft dieses Bereichs. In entsprechenden Forschungsarbeiten beschreiben die KI-Experten von Apple ein System, mit dem Siri mehr kann, als nur Inhalte in Bildern zu identifizieren, und dadurch intelligenter und nützlicher wird. Dieses Funktionsmodell heißt ReALM, basiert auf dem GPT4.0-Standard und verfügt über eine

Zusammenfassung der FAQs für die Verwendung von Deepseek Zusammenfassung der FAQs für die Verwendung von Deepseek Feb 19, 2025 pm 03:45 PM

Deepseekai Tool User Guide und FAQ Deepseek ist ein leistungsstarkes KI -Intelligent -Tool. FAQ: Der Unterschied zwischen verschiedenen Zugriffsmethoden: Es gibt keinen Unterschied in der Funktion zwischen Webversion, App -Version und API -Aufrufen, und App ist nur ein Wrapper für die Webversion. Die lokale Bereitstellung verwendet ein Destillationsmodell, das der Vollversion von Deepseek-R1 geringfügig unteren ist, das 32-Bit-Modell theoretisch 90% Vollversionsfunktion. Was ist eine Taverne? SillyTervern ist eine Front-End-Oberfläche, die das KI-Modell über API oder Ollama anruft. Was ist Breaking Limit

Golang verwendet Multipart, um große Dateien auf eine externe API hochzuladen. So vermeiden Sie das Problem „io.Copy(io.Writer, io.Reader)'. Golang verwendet Multipart, um große Dateien auf eine externe API hochzuladen. So vermeiden Sie das Problem „io.Copy(io.Writer, io.Reader)'. Feb 06, 2024 am 09:45 AM

Mein Ziel ist es, mit dem integrierten net/http-Paket von Golang eine große Datei auf POST https://somehost/media hochzuladen. HTTP-Format POST/mediaHTTP/1.1Host:somehostContent-Length:434Content-Type:multipart/form-data;boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW------WebKitFormBoundary7MA4YWxkTr

Fähigkeiten zum Aufrufen der PHP-Kuaishou-API-Schnittstelle: Umgang mit den von der Schnittstelle zurückgegebenen Fehlerinformationen Fähigkeiten zum Aufrufen der PHP-Kuaishou-API-Schnittstelle: Umgang mit den von der Schnittstelle zurückgegebenen Fehlerinformationen Jul 20, 2023 pm 11:22 PM

Tipps zum Aufrufen der PHP-Kuaishou-API-Schnittstelle: So gehen Sie mit den von der Schnittstelle zurückgegebenen Fehlerinformationen um. Wenn Sie PHP zum Aufrufen der Kuaishou-API-Schnittstelle verwenden, stoßen wir häufig auf Situationen, in denen die Schnittstelle Fehler zurückgibt. Für von der Verarbeitungsschnittstelle zurückgegebene Fehlerinformationen müssen wir eine entsprechende Verarbeitung und Rückmeldung bereitstellen, um die Stabilität und Benutzererfahrung der Anwendung zu verbessern. In diesem Artikel werden einige Techniken zum Umgang mit von Schnittstellen zurückgegebenen Fehlerinformationen vorgestellt und entsprechende Codebeispiele bereitgestellt. Verwenden Sie try-catch, um Ausnahmen abzufangen. Beim Aufruf der API-Schnittstelle können einige Ausnahmefehler auftreten.

See all articles