Maison > Article > développement back-end > Comment gérer les noms de fichiers avec différents encodages lors du téléchargement de fichiers Golang ?
Pour gérer les noms de fichiers codés différemment dans les téléchargements de fichiers Go, vous pouvez utiliser les deux solutions suivantes : en utilisant mime.Header et le décodage d'URL. mime.Header stocke l'encodage d'origine via le champ du nom de fichier, tandis que le décodage d'URL utilise la fonction PathUnescape pour analyser le nom de fichier.
Comment gérer les noms de fichiers codés différemment lors du téléchargement de fichiers Go
Dans Go, la gestion des noms de fichiers codés différemment est cruciale pour garantir l'exactitude du processus de téléchargement de fichiers. L'utilisation généralisée de différents jeux de caractères et schémas de codage peut entraîner une mauvaise interprétation des caractères spéciaux dans les noms de fichiers, entraînant un échec de l'enregistrement ou du traitement du fichier.
Pour gérer les noms de fichiers avec des encodages différents, vous pouvez utiliser la solution de contournement suivante :
Utilisez 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
fournit un nom de fichier , qui peut être utilisé pour analyser et enregistrer le nom du fichier téléchargé. Le champ <code>filename
stocke le nom de fichier dans son encodage d'origine. L'exemple suivant montre comment obtenir l'encodage d'origine d'un nom de fichier téléchargé :
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) }🎜🎜Utilisation du décodage d'URL🎜🎜🎜Le décodage d'URL est une autre méthode courante d'analyse des noms de fichiers téléchargés. L'exemple suivant montre comment utiliser le décodage d'URL pour extraire le nom de fichier d'origine de
fname
: 🎜rrreee🎜🎜Cas pratique🎜🎜🎜Ce qui suit est un exemple de code complet qui montre comment utiliser mime .Header
et décodage d'URL pour gérer les noms de fichiers avec différents encodages dans les téléchargements de fichiers Go : 🎜rrreee🎜 J'espère que cet article pourra vous aider à gérer efficacement les noms de fichiers avec différents encodages dans les téléchargements de fichiers Go. 🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!