


Bagaimana untuk mendapatkan multipart.File daripada multipart.Part dalam Go tanpa menyimpan ke cakera?
Semasa proses pembangunan bahasa Go, editor Apple Apple sering menghadapi keperluan untuk mendapatkan berbilang bahagian. Fail daripada objek berbilang bahagian. Bahagian apabila menggunakan pakej berbilang bahagian untuk memproses fail muat naik borang. Walau bagaimanapun, pakej berbilang bahagian dalam pustaka standard tidak secara langsung menyediakan kaedah untuk mendapatkan berbilang bahagian. Fail, tetapi menyimpan fail ke cakera secara lalai. Jadi, adakah terdapat cara untuk memintas pengehadan ini dan mendapatkan multipart.Fail terus dari multipart.Part? Seterusnya, kami akan memperkenalkan anda kepada kaedah untuk mendapatkan multipart.Fail daripada multipart.Part dalam Go tanpa menyimpannya ke cakera.
Kandungan soalan
Dalam API saya, saya mempunyai fungsi yang berfungsi dengan baik dengan menghantar dari r.Body
中提取 multipart.File
seperti yang ditunjukkan di bawah
file, handler, err := r.FormFile("file")
Saya menggunakan multipart.File
untuk memuat naik ke s3 API menggunakan klien minio seperti yang ditunjukkan di bawah
err = uploadToMinio(rs, file, fileSize, fileName, guid.String(), userId)
Sekarang saya telah menambah data borang tambahan, saya nampaknya tidak boleh menggunakan r.Body untuk mencapai ini lagi. Saya mendapat mesej "Ralat mengambil fail borang" seperti yang ditunjukkan dalam kod di bawah.
Berdasarkan soalan ini, saya melaksanakan MultipartReader
untuk mendapatkan data borang daripada multipart.Part.
tidak mempunyai multipart.File
jadi saya perlu melaksanakan bahagian itu tanpa menulisnya ke cakera dan membacanya semula jika boleh.
Ini kod saya
var err error start := time.Now() const maxUploadSize = 500 * 1024 * 1024 // 500 Mb var requiredByDate FileRequiredDateData mr, err := r.MultipartReader() if err != nil { log.Println(err) http.Error(w, err.Error(), http.StatusInternalServerError) return } for { part, err := mr.NextPart() // This is OK, no more parts if err == io.EOF { break } // Some error if err != nil { log.Println("multipart reader other error") http.Error(w, err.Error(), http.StatusInternalServerError) return } log.Println(part.FormName()) if part.FormName() == "data" { log.Println("multipart reader found multipart form name data") decoder := json.NewDecoder(part) err = decoder.Decode(&requiredByDate) if err != nil { log.Println("error in decoding request body data") log.Println(err.Error()) http.Error(w, err.Error(), http.StatusInternalServerError) return } if part.FormName() == "file" { file, handler, err := r.FormFile("file") <-- error getting form file here if err != nil { log.Println("error getting form file") log.Println(err.Error()) http.Error(w, http.StatusText(http.StatusBadRequest), http.StatusInternalServerError) return } defer file.Close() ---- err = uploadToMinio(rs, file, fileSize, fileName, guid.String(), userId) if err != nil { log.Println(err) http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) return }
Penyelesaian
Anda sudah menstrim bahagian borang, anda tidak boleh menghubungi FormFile
,您必须自己读取该文件。使用 part.Read
读取文件的字节,或者复制文件等。请注意,part
实现了 io.Reader
sekarang supaya anda boleh membaca daripadanya seperti fail.
Atas ialah kandungan terperinci Bagaimana untuk mendapatkan multipart.File daripada multipart.Part dalam Go tanpa menyimpan ke cakera?. 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



Perpustakaan yang digunakan untuk operasi nombor terapung dalam bahasa Go memperkenalkan cara memastikan ketepatannya ...

Masalah Threading Giliran di GO Crawler Colly meneroka masalah menggunakan Perpustakaan Colly Crawler dalam bahasa Go, pemaju sering menghadapi masalah dengan benang dan permintaan beratur. � ...

Perpustakaan mana yang dibangunkan oleh syarikat besar atau projek sumber terbuka yang terkenal? Semasa pengaturcaraan di GO, pemaju sering menghadapi beberapa keperluan biasa, ...

Dua cara untuk menentukan struktur dalam bahasa Go: perbezaan antara VAR dan jenis kata kunci. Apabila menentukan struktur, pergi bahasa sering melihat dua cara menulis yang berbeza: pertama ...

Multithreading dalam bahasa dapat meningkatkan kecekapan program. Terdapat empat cara utama untuk melaksanakan multithreading dalam bahasa C: Buat proses bebas: Buat pelbagai proses berjalan secara bebas, setiap proses mempunyai ruang ingatan sendiri. Pseudo-Multithreading: Buat pelbagai aliran pelaksanaan dalam proses yang berkongsi ruang memori yang sama dan laksanakan secara bergantian. Perpustakaan multi-threaded: Gunakan perpustakaan berbilang threaded seperti PTHREADS untuk membuat dan mengurus benang, menyediakan fungsi operasi benang yang kaya. Coroutine: Pelaksanaan pelbagai threaded ringan yang membahagikan tugas menjadi subtask kecil dan melaksanakannya pada gilirannya.

Perbezaan antara percetakan rentetan dalam bahasa Go: perbezaan kesan menggunakan fungsi println dan rentetan () sedang ...

Masalah menggunakan redisstream untuk melaksanakan beratur mesej dalam bahasa Go menggunakan bahasa Go dan redis ...

GO Pointer Syntax dan menangani masalah dalam penggunaan perpustakaan Viper semasa pengaturcaraan dalam bahasa Go, adalah penting untuk memahami sintaks dan penggunaan petunjuk, terutama dalam ...
