第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

不能發(fā)布多個(gè)文件

不能發(fā)布多個(gè)文件

Go
精慕HU 2023-06-19 11:11:48
我知道如何上傳單個(gè)文件,但現(xiàn)在我正嘗試在同一個(gè) Go 函數(shù)中上傳多個(gè)文件。這是我的代碼:func PhotoCreatePOST(w http.ResponseWriter, r  *http.Request) {    var err errorr.ParseMultipartForm(32 << 20) // 32MB is the default used by FormFilefhs := r.MultipartForm.File["files"]var fileNames []stringvar filename stringvar ext stringfor _, file := range fhs { //Iterate over multiple uploaded files    if err != nil {        log.Fatal(err)    } else {        dir, err := os.Getwd()        if err != nil {            log.Fatal(err)        }        ext = strings.ToLower(path.Ext(file.Filename))        filename = path.Join(random.RandString(10) + ext)        destFolder := "/media/photos"        if _, err := os.Stat(destFolder); os.IsNotExist(err) {            os.Mkdir(destFolder, 0755)        }        //destination Path. The string which is Saving in DB        savePath := destFolder + "/" + filename        err = ioutil.WriteFile(savePath, file, 0777) //<--Here is the problem        if err != nil {            log.Println(err)            io.WriteString(w, err.Error())            return        }    }}//Add file url to the slicefileNames = append(fileNames, filename)}但我收到此錯(cuò)誤:cannot use file (type *multipart.FileHeader) as type []byte in argument to ioutil.WriteFile我試過file像這樣讀入字節(jié):b, err := ioutil.ReadFile(file)     if err != nil {        fmt.Print(err)    }并保存b而不是file.但后來我得到另一個(gè)錯(cuò)誤can not read *multipart.Fileheader as string 我怎樣才能解決這個(gè)問題?
查看完整描述

2 回答

?
冉冉說

TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超1個(gè)贊

這里是記錄的完整解決方案:

// PhotoCreatePOST saves multiple photo uploads

func PhotoCreatePOST(w http.ResponseWriter, r *http.Request) {



? ? err := r.ParseMultipartForm(100000)

? ? if err != nil {

? ? ? ? fmt.Println("error parsing multiplepart form", err)

? ? ? ? return

? ? }


? ? files := r.MultipartForm.File["files"]


? ? for i, _ := range files { //Iterate over multiple uploaded files


? ? ? ? file, err := files[i].Open()

? ? ? ? defer file.Close()

? ? ? ? if err != nil {

? ? ? ? ? ? fmt.Println("error opening file ", err)

? ? ? ? ? ? return

? ? ? ? }


? ? ? ? ext := path.Ext(files[i].Filename)


? ? ? ? //TODO: Verify extension is valid


? ? ? ? filename := GetRandomString(10) + ext


? ? ? ? //create destination file making sure the path is writeable.

? ? ? ? dst, err := os.Create("media/photos/" + filename)

? ? ? ? defer dst.Close()

? ? ? ? if err != nil {

? ? ? ? ? ? fmt.Println("error creating destination ", err)

? ? ? ? ? ? return

? ? ? ? }


? ? ? ? //copy the uploaded file to the destination file

? ? ? ? if _, err := io.Copy(dst, file); err != nil {

? ? ? ? ? ? fmt.Println("error copying file", err)

? ? ? ? ? ? return

? ? ? ? }


? ? ? ? fmt.Println("Image upload success: ", files[i].Filename)

? ? }


? ? fmt.Println("all are uploaded")


? ? PhotoCreateGET(w, r)

? ? return?


}


//Generate random filename (never trust user input!)

var letterRunes = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456789")


// GetString returns a random string

func GetRandomString(n int) string {

? ? rand.Seed(time.Now().UnixNano())

? ? b := make([]rune, n)

? ? for i := range b {

? ? ? ? b[i] = letterRunes[rand.Intn(len(letterRunes))]

? ? }

? ? return string(b)

}

以及上傳表格:


<form method="post" action="/create/photo" enctype="multipart/form-data">

? ? ? ? <input type="file"? name="files"? multiple>

? ? ? ? <input type="hidden" name="token" value="{{.token}}">

? ? ? ? <button title="submit" type="submit" >Save </button>

</form>

瞧。希望它可以為其他人節(jié)省一些時(shí)間。


查看完整回答
反對(duì) 回復(fù) 2023-06-19
?
慕碼人8056858

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超6個(gè)贊

這大致就是您的操作方式。


fileHeaders := r.MultipartForm.File["files"]

var fileNames []string


for _, fileHeader := range fileHeaders {

    file, err := fileHeader.Open()

    if err != nil {

        return err

    }

    defer file.Close()


    // Generate the destination filename randomly. Using even the passed

    // extension is a security vulnerability unless you have a whitelist.

    dest, err := ioutil.TempFile("/media/photos", "")

    if err != nil {

        return err

    }

    defer dest.Close()


    if _, err := io.Copy(dest, file); err != nil {

        return err

    }


    fileNames = append(fileNames, dest.Name())

}


查看完整回答
反對(duì) 回復(fù) 2023-06-19
  • 2 回答
  • 0 關(guān)注
  • 153 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)