


Golang menggunakan berbilang bahagian untuk memuat naik fail besar ke API luaran. Bagaimana untuk mengelakkan masalah `io.Copy(io.Writer, io.Reader)`
Matlamat saya adalah untuk memuat naik fail besar ke POST https://somehost/media
menggunakan pakej net/http terbina dalam golang.
Format HTTP untuk panggilan Api
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--
Di golang, ini kodnya.
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)) }
Bagaimana untuk mengelakkan io.Copy(io.Writer, io.Reader)
masalah
Kod di atas berfungsi dengan baik, tetapi pada baris _, errFile3 = io.Copy(part3, file)
. Ini pada asasnya menyalin segala-galanya dalam fail ke dalam ingatan utama.
Bagaimana untuk mengelakkan situasi ini?
Adakah ada cara saya boleh menstrim fail besar ke api melalui multipart-formdata
?
Program ini akan berjalan pada pelayan jauh. Boleh ranap jika membuka fail yang sangat besar.
Jawapan betul
Gunakan io.Pipe dan goroutine untuk menyalin fail ke permintaan tanpa memuatkan keseluruhan fail dalam memori.
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
Atas ialah kandungan terperinci Golang menggunakan berbilang bahagian untuk memuat naik fail besar ke API luaran. Bagaimana untuk mengelakkan masalah `io.Copy(io.Writer, io.Reader)`. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Berdasarkan pengoptimuman berterusan model besar, ejen LLM - entiti algoritma yang berkuasa ini telah menunjukkan potensi untuk menyelesaikan tugas penaakulan pelbagai langkah yang kompleks. Daripada pemprosesan bahasa semula jadi kepada pembelajaran mendalam, ejen LLM secara beransur-ansur menjadi tumpuan penyelidikan dan industri Mereka bukan sahaja dapat memahami dan menjana bahasa manusia, tetapi juga merumuskan strategi, melaksanakan tugas dalam persekitaran yang pelbagai, dan juga menggunakan panggilan API dan pengekodan untuk Membina. penyelesaian. Dalam konteks ini, pengenalan rangka kerja AgentQuest merupakan satu peristiwa penting Ia bukan sahaja menyediakan platform penanda aras modular untuk penilaian dan kemajuan ejen LLM, tetapi juga menyediakan penyelidik dengan alat yang Berkuasa untuk menjejak dan meningkatkan prestasi ejen ini pada masa yang tertentu. tahap yang lebih berbutir

Cara menggunakan perkhidmatan Web PHP dan panggilan API Dengan perkembangan teknologi Internet yang berterusan, perkhidmatan Web dan panggilan API telah menjadi bahagian yang amat diperlukan dalam pembangun. Dengan menggunakan perkhidmatan web dan panggilan API, kami boleh berinteraksi dengan mudah dengan aplikasi lain untuk mendapatkan data atau melaksanakan fungsi tertentu. Sebagai bahasa skrip sebelah pelayan yang popular, PHP juga menyediakan pelbagai fungsi dan alatan untuk menyokong pembangunan perkhidmatan Web dan panggilan API. Dalam artikel ini, saya akan memperkenalkan secara ringkas cara menggunakan PHP untuk

Untuk melihat alamat dompet Litecoin, lawati dompet Litecoin dan cari alamat dalam tab "Terima" anda juga boleh menggunakan penyemak imbas blockchain atau panggilan API.

Bolehkah perisian yang disusun oleh Mingw digunakan dalam persekitaran Linux? Mingw ialah rantai alat yang digunakan pada platform Windows untuk menyusun dan menjana program yang boleh dijalankan pada Windows. Jadi, bolehkah perisian yang disusun oleh Mingw digunakan dalam persekitaran Linux? Jawapannya ya, tetapi ia memerlukan beberapa kerja dan langkah tambahan. Cara yang paling biasa untuk menjalankan program yang disusun pada Windows pada Linux ialah menggunakan Wine. Wain ialah alat yang digunakan dalam Linux dan Un

Panduan Pengguna Alat DeepSeekai dan FAQ DeepSeek adalah alat pintar AI yang kuat. FAQ: Perbezaan antara kaedah akses yang berbeza: Tidak ada perbezaan fungsi antara versi web, versi aplikasi dan panggilan API, dan aplikasi hanya pembungkus untuk versi web. Penggunaan tempatan menggunakan model penyulingan, yang sedikit lebih rendah daripada versi penuh DeepSeek-R1, tetapi model 32-bit secara teorinya mempunyai keupayaan versi penuh 90%. Apa itu bar? Sillytavern adalah antara muka depan yang memerlukan memanggil model AI melalui API atau Ollama. Apa itu Had Breaking

Ditulis oleh Noah |. 51CTO Technology Stack (WeChat ID: blog51cto) Siri, yang sentiasa dikritik oleh pengguna sebagai "agak terencat akal", boleh diselamatkan! Siri merupakan salah seorang wakil dalam bidang pembantu suara pintar sejak kelahirannya, tetapi prestasinya tidak memuaskan sejak sekian lama. Bagaimanapun, hasil penyelidikan terkini yang dikeluarkan oleh pasukan kecerdasan buatan Apple dijangka akan mengubah status quo dengan ketara. Keputusan ini menarik dan meningkatkan jangkaan yang besar untuk masa depan bidang ini. Dalam kertas penyelidikan berkaitan, pakar AI Apple menerangkan sistem yang Siri boleh melakukan lebih daripada sekadar mengenal pasti kandungan dalam imej, menjadi lebih pintar dan lebih berguna. Model berfungsi ini dipanggil ReALM, yang berdasarkan piawaian GPT4.0 dan mempunyai a

Matlamat saya adalah untuk memuat naik fail besar ke POST https://somehost/media menggunakan pakej net/http terbina dalam golang. Format HTTP POST/mediaHTTP/1.1Host:somehostContent-Length:434Content-Type:multipart/form-data;boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW------WebKitFormBoundary7MA4YWxkTr

Petua panggilan antara muka API PHP Kuaishou: Cara mengendalikan mesej ralat yang dikembalikan oleh antara muka Apabila menggunakan PHP untuk memanggil antara muka API Kuaishou, kita sering menghadapi situasi di mana antara muka mengembalikan ralat. Untuk maklumat ralat yang dikembalikan oleh antara muka pemprosesan, kami perlu menyediakan pemprosesan dan maklum balas yang sesuai untuk meningkatkan kestabilan dan pengalaman pengguna aplikasi. Artikel ini akan memperkenalkan beberapa teknik untuk mengendalikan maklumat ralat yang dikembalikan oleh antara muka dan memberikan contoh kod yang sepadan. Gunakan try-catch untuk menangkap pengecualian Apabila memanggil antara muka API, beberapa ralat pengecualian mungkin berlaku.
