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

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

從 io 中提取文件名。ReadCloser

從 io 中提取文件名。ReadCloser

Go
慕的地6264312 2022-09-05 17:37:08
我需要獲取從前端接收后端的某些文件的文件名。后端(在 Go 中實(shí)現(xiàn))將以 .有沒(méi)有辦法從中提取它?io.ReadCloserio.ReadCloser
查看完整描述

5 回答

?
BIG陽(yáng)

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

后端(在 Go 中實(shí)現(xiàn))將以 io 的形式接收文件。ReadCloser.有沒(méi)有辦法從io中提取它。ReadCloser?

不。

看看io的方法。ReadCloser 通過(guò)運(yùn)行提供,并注意沒(méi)有一個(gè)方法可以提供名稱。所以除非你什么都不知道,它是一個(gè)io。ReadCloser 你根本做不到。go doc io.ReadCloser


查看完整回答
反對(duì) 回復(fù) 2022-09-05
?
寶慕林4294392

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

package main


import (

    "errors"

    "fmt"

    "io"

    "os"

)


func fatalln(err error) {

    fmt.Fprintln(os.Stderr, err)

    os.Exit(1)

}


// hasName interface is an interface that expects types

// that implements it to have "Name() string" method.

type hasName interface {

    Name() string

}


func open(name string) (io.ReadCloser, error) {

    f, err := os.Open(name)

    if err != nil {

        return nil, err

    }

    // f implements io.ReadCloser interface as *os.File

    // has Read and Close methods.

    return f, nil

}


func main() {

    // rc is of the type io.ReadCloser

    rc, err := open("example.txt")

    if err != nil {

        fatalln(err)

    }

    defer rc.Close()


    // Type assetion to check rc's underlying type has

    // a method "Name() string".

    f, ok := rc.(hasName)

    if !ok {

        fatalln(errors.New("type assertion failed"))

    }


    // Yay, type assertion succeeded. Print the name!

    fmt.Println("Name:", f.Name())

}


查看完整回答
反對(duì) 回復(fù) 2022-09-05
?
慕工程0101907

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

通過(guò)定義嵌入的接口,您可以預(yù)先需要一個(gè)方法:io.ReaderName()


package main


import (

    "fmt"

    "io"

    "log"

    "os"

)


type NamedReadCloser interface {

    io.ReadCloser

    Name() string

}


func doThings(f NamedReadCloser) error {

    defer f.Close()

    b, err := io.ReadAll(f)

    if err != nil {

        return err

    }

    fmt.Printf("Name: %s, Content: %s\n", f.Name(), b)

    return nil

}


func main() {

    f, err := os.Open("/etc/hosts")

    if err != nil {

        log.Fatal("Cannot open file: ", err)

    }

    err = doThings(f)

    if err != nil {

        log.Fatal("Error doing things: ", err)

    }

}

僅當(dāng)傳入的內(nèi)容具有 name 方法(如 .如果沒(méi)有,那么您試圖做的事情是不可能的。*os.File


查看完整回答
反對(duì) 回復(fù) 2022-09-05
?
慕森王

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

這是運(yùn)行時(shí)讀取器的讀取器,當(dāng)前端將文件發(fā)送到后端時(shí),它從網(wǎng)絡(luò)讀取文件。您必須根據(jù)請(qǐng)求本身進(jìn)行工作才能獲得該文件名。這是一個(gè)假設(shè),但在大多數(shù)情況下,對(duì)于文件上傳,請(qǐng)求是多部分請(qǐng)求。如果您有相同的情況,則可以讀取標(biāo)頭,通常用于標(biāo)識(shí)文件類型。Go Native具有解析細(xì)節(jié)的能力。你可以試試這個(gè) :io.ReadCloserContent-Dispositionhttp.Request


formFile, handler, err := r.FormFile("file")  // read file from network with key "file"

defer formFile.Close()


fileName := handler.Filename // Get file name


查看完整回答
反對(duì) 回復(fù) 2022-09-05
?
暮色呼如

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

您必須使用方法將其轉(zhuǎn)換為類型:Name


package main


import (

   "io"

   "os"

)


func open(name string) (io.ReadCloser, error) {

   return os.Open(name)

}


func main() {

   c, e := open("file.txt")

   if e != nil {

      panic(e)

   }

   defer c.Close()

   f := c.(*os.File)

   println(f.Name())

}


查看完整回答
反對(duì) 回復(fù) 2022-09-05
  • 5 回答
  • 0 關(guān)注
  • 180 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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