Maison > développement back-end > Golang > le corps du texte

Comment gérer les noms de fichiers avec différents encodages lors du téléchargement de fichiers Golang ?

WBOY
Libérer: 2024-06-02 14:09:57
original
423 Les gens l'ont consulté

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.

Golang 文件上传中如何处理不同编码的文件名?

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.Headermime.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)
}
Copier après la connexion

使用 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)
}
Copier après la connexion

实战案例

以下是一个完整的示例代码,用于演示如何使用 mime.Header

mime.Header fournit un nom de fichier < /code>, 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)
}
Copier après la connexion
🎜🎜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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal