Untuk mengendalikan nama fail yang dikodkan secara berbeza dalam muat naik fail Go, anda boleh menggunakan dua penyelesaian berikut: menggunakan mime.Header dan penyahkodan URL. mime.Header menyimpan pengekodan asal melalui medan nama fail, manakala penyahkodan URL menggunakan fungsi PathUnescape untuk menghuraikan nama fail.
Cara mengendalikan nama fail yang dikodkan secara berbeza dalam muat naik fail Go
Dalam Go, pengendalian nama fail yang dikodkan secara berbeza adalah penting untuk memastikan ketepatan proses muat naik fail. Penggunaan meluas set aksara dan skema pengekodan yang berbeza boleh menyebabkan aksara khas dalam nama fail disalahtafsir, mengakibatkan penjimatan fail atau kegagalan pemprosesan.
Untuk mengendalikan nama fail dengan pengekodan yang berbeza, anda boleh menggunakan penyelesaian berikut:
Gunakan mime.Header
mime.Header
提供了一个 filename
字段,该字段可以用于解析和保存上传的文件名。filename
字段以原始编码存储文件名。以下示例演示如何获取上传文件名的原始编码:
import "mime/multipart" import "fmt" func handleFileUpload(r *http.Request) { r.ParseMultipartForm(32 << 20) // 设置最大上传大小为 32 MB file, _, err := r.FormFile("file") if err != nil { fmt.Println(err) return } defer file.Close() fname := r.Form.Get("file") fnameDec, err := mime.ParseMediaType(fname) if err != nil { fmt.Println(err) return } fmt.Println("Original filename:", fname) fmt.Println("Decoded filename:", fnameDec.Filename) }
使用 URL 解码
URL 解码是另一种解析上传文件名的常用方法。以下示例演示如何使用 URL 解码从 fname
中提取原始文件名:
import "net/url" import "fmt" func handleFileUpload(r *http.Request) { r.ParseMultipartForm(32 << 20) file, _, err := r.FormFile("file") if err != nil { fmt.Println(err) return } defer file.Close() fname := r.Form.Get("file") fnameDec, err := url.PathUnescape(fname) if err != nil { fmt.Println(err) return } fmt.Println("Original filename:", fname) fmt.Println("Decoded filename:", fnameDec) }
实战案例
以下是一个完整的示例代码,用于演示如何使用 mime.Header
mime.Header
menyediakan filename
menyimpan nama fail dalam pengekodan asalnya. Contoh berikut menunjukkan cara mendapatkan pengekodan asal nama fail yang dimuat naik:
package main import ( "fmt" "net/http" "mime/multipart" "url" ) func handleFileUpload(w http.ResponseWriter, r *http.Request) { r.ParseMultipartForm(32 << 20) file, _, err := r.FormFile("file") if err != nil { fmt.Fprintln(w, "Error parsing multipart form:", err) return } defer file.Close() fname := r.Form.Get("file") fnameDec, err := mime.ParseMediaType(fname) if err != nil { fmt.Fprintf(w, "Error parsing MIME header: %s", err) return } fmt.Fprintf(w, "Original filename: %s\n", fname) fmt.Fprintf(w, "Decoded filename (mime.Header): %s\n", fnameDec.Filename) fnameDec, err = url.PathUnescape(fname) if err != nil { fmt.Fprintf(w, "Error unencoding URL: %s", err) return } fmt.Fprintf(w, "Decoded filename (URL): %s", fnameDec) } func main() { http.HandleFunc("/upload", handleFileUpload) http.ListenAndServe(":8080", nil) }
fname
: 🎜rrreee🎜🎜Kes praktikal🎜🎜🎜Berikut ialah contoh kod lengkap yang menunjukkan cara menggunakan mime .Pengepala dan penyahkodan URL untuk mengendalikan nama fail dengan pengekodan berbeza dalam muat naik fail Go: 🎜rrreee🎜 Saya harap artikel ini dapat membantu anda mengendalikan nama fail dengan pengekodan berbeza dalam muat naik fail Go dengan cekap. 🎜
Atas ialah kandungan terperinci Bagaimana untuk mengendalikan nama fail yang dikodkan secara berbeza dalam muat naik fail Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!