Golang ファイルアップロードで異なるエンコードされたファイル名を処理するにはどうすればよいですか?

WBOY
リリース: 2024-06-02 14:09:57
オリジナル
428 人が閲覧しました

Go ファイルのアップロードで異なるエンコードされたファイル名を処理するには、mime.Header と URL デコードを使用する 2 つのソリューションを使用できます。 mime.Header はファイル名フィールドを介して元のエンコードを保存しますが、URL デコードでは PathUnescape 関数を使用してファイル名を解析します。

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

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.Headerfilename < /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)
}
ログイン後にコピー
🎜🎜URL デコードの使用🎜🎜🎜URL デコードは、アップロードされたファイル名を解析するもう 1 つの一般的な方法です。次の例は、URL デコードを使用して fname から元のファイル名を抽出する方法を示しています。 Go ファイルのアップロードで異なるエンコーディングのファイル名を処理するための .Header と URL デコード: 🎜rrreee🎜 この記事が、Go ファイルのアップロードで異なるエンコーディングのファイル名を効率的に処理するのに役立つことを願っています。 🎜

以上がGolang ファイルアップロードで異なるエンコードされたファイル名を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート