Heim  >  Artikel  >  Backend-Entwicklung  >  Wie gehe ich mit unterschiedlich codierten Dateinamen beim Hochladen von Golang-Dateien um?

Wie gehe ich mit unterschiedlich codierten Dateinamen beim Hochladen von Golang-Dateien um?

WBOY
WBOYOriginal
2024-06-02 14:09:57422Durchsuche

Um unterschiedlich codierte Dateinamen beim Hochladen von Go-Dateien zu verarbeiten, können Sie die folgenden zwei Lösungen verwenden: die Verwendung von mime.Header und die URL-Dekodierung. mime.Header speichert die ursprüngliche Kodierung über das Dateinamenfeld, während die URL-Dekodierung die PathUnescape-Funktion zum Parsen des Dateinamens verwendet.

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

So gehen Sie mit unterschiedlich kodierten Dateinamen beim Datei-Upload in Go um

In Go ist der Umgang mit unterschiedlich kodierten Dateinamen entscheidend, um die Korrektheit des Datei-Upload-Prozesses sicherzustellen. Die weit verbreitete Verwendung unterschiedlicher Zeichensätze und Codierungsschemata kann dazu führen, dass Sonderzeichen in Dateinamen falsch interpretiert werden, was zu Fehlern beim Speichern oder Verarbeiten der Datei führt.

Um Dateinamen mit unterschiedlichen Codierungen zu verarbeiten, können Sie die folgende Problemumgehung verwenden:

Verwenden Sie 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 stellt einen Dateinamen -Feld, das zum Parsen und Speichern des hochgeladenen Dateinamens verwendet werden kann. Das Feld <code>filename speichert den Dateinamen in seiner ursprünglichen Kodierung. Das folgende Beispiel zeigt, wie man die ursprüngliche Kodierung eines hochgeladenen Dateinamens erhält:

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)
}
🎜🎜URL-Dekodierung verwenden🎜🎜🎜URL-Dekodierung ist eine weitere gängige Methode zum Parsen hochgeladener Dateinamen. Das folgende Beispiel zeigt, wie Sie mithilfe der URL-Dekodierung den ursprünglichen Dateinamen aus fname extrahieren: 🎜rrreee🎜🎜Praktischer Fall🎜🎜🎜Das Folgende ist ein vollständiger Beispielcode, der die Verwendung von mime demonstriert .Header und URL-Dekodierung zur Handhabung von Dateinamen mit unterschiedlichen Kodierungen beim Hochladen von Go-Dateien: 🎜rrreee🎜 Ich hoffe, dieser Artikel kann Ihnen dabei helfen, Dateinamen mit unterschiedlichen Kodierungen beim Hochladen von Go-Dateien effizient zu verarbeiten. 🎜

Das obige ist der detaillierte Inhalt vonWie gehe ich mit unterschiedlich codierten Dateinamen beim Hochladen von Golang-Dateien um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn