Go ファイルのアップロードで異なるエンコードされたファイル名を処理するには、mime.Header と URL デコードを使用する 2 つのソリューションを使用できます。 mime.Header はファイル名フィールドを介して元のエンコードを保存しますが、URL デコードでは PathUnescape 関数を使用してファイル名を解析します。
Go ファイルアップロードで異なるエンコードされたファイル名を処理する方法
Go では、異なるエンコードされたファイル名を処理することは、ファイルアップロードプロセスの正確性を確保するために非常に重要です。さまざまな文字セットやエンコード スキームが広く使用されていると、ファイル名の特殊文字が誤って解釈され、ファイルの保存や処理が失敗する可能性があります。
異なるエンコーディングのファイル名を処理するには、次の回避策を使用できます:
mime.Header
を使用します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
は filename < /code> フィールド。アップロードされたファイル名を解析して保存するために使用できます。 <code>filename
フィールドには、ファイル名が元のエンコーディングで保存されます。次の例は、アップロードされたファイル名の元のエンコーディングを取得する方法を示しています。
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
から元のファイル名を抽出する方法を示しています。 Go ファイルのアップロードで異なるエンコーディングのファイル名を処理するための .Header と URL デコード: 🎜rrreee🎜 この記事が、Go ファイルのアップロードで異なるエンコーディングのファイル名を効率的に処理するのに役立つことを願っています。 🎜以上がGolang ファイルアップロードで異なるエンコードされたファイル名を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。