Bagaimana untuk mengendalikan nama fail yang dikodkan secara berbeza dalam muat naik fail Golang?

WBOY
Lepaskan: 2024-06-02 14:09:57
asal
421 orang telah melayarinya

Untuk mengendalikan nama fail yang dikodkan secara berbeza dalam muat naik fail Go, anda boleh menggunakan dua penyelesaian berikut: menggunakan mime.Header dan penyahkodan URL. mime.Header menyimpan pengekodan asal melalui medan nama fail, manakala penyahkodan URL menggunakan fungsi PathUnescape untuk menghuraikan nama fail.

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

Cara mengendalikan nama fail yang dikodkan secara berbeza dalam muat naik fail Go

Dalam Go, pengendalian nama fail yang dikodkan secara berbeza adalah penting untuk memastikan ketepatan proses muat naik fail. Penggunaan meluas set aksara dan skema pengekodan yang berbeza boleh menyebabkan aksara khas dalam nama fail disalahtafsir, mengakibatkan penjimatan fail atau kegagalan pemprosesan.

Untuk mengendalikan nama fail dengan pengekodan yang berbeza, anda boleh menggunakan penyelesaian berikut:

Gunakan 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)
}
Salin selepas log masuk

使用 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)
}
Salin selepas log masuk

实战案例

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

mime.Header menyediakan nama fail < /code>, yang boleh digunakan untuk menghuraikan dan menyimpan nama fail yang dimuat naik. Medan filename menyimpan nama fail dalam pengekodan asalnya. Contoh berikut menunjukkan cara mendapatkan pengekodan asal nama fail yang dimuat naik:

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)
}
Salin selepas log masuk
🎜🎜Menggunakan Penyahkod URL🎜🎜🎜Penyahkodan URL ialah satu lagi kaedah biasa untuk menghuraikan nama fail yang dimuat naik. Contoh berikut menunjukkan cara menggunakan penyahkodan URL untuk mengekstrak nama fail asal daripada fname: 🎜rrreee🎜🎜Kes praktikal🎜🎜🎜Berikut ialah contoh kod lengkap yang menunjukkan cara menggunakan mime .Pengepala dan penyahkodan URL untuk mengendalikan nama fail dengan pengekodan berbeza dalam muat naik fail Go: 🎜rrreee🎜 Saya harap artikel ini dapat membantu anda mengendalikan nama fail dengan pengekodan berbeza dalam muat naik fail Go dengan cekap. 🎜

Atas ialah kandungan terperinci Bagaimana untuk mengendalikan nama fail yang dikodkan secara berbeza dalam muat naik fail Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!