Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk mengendalikan nama fail yang dikodkan secara berbeza dalam muat naik fail Golang?

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

WBOY
WBOYasal
2024-06-02 14:09:57431semak imbas

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)
}

使用 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 menyediakan nama fail , 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)
}
🎜🎜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!

Kenyataan:
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