如何使用Golang获取已发布二进制数据的文件名?

如何使用Golang获取已发布二进制数据的文件名?,go,gorest,Go,Gorest,我使用Postman REST API客户端将csv文件发布为二进制文件。我需要得到上传文件的文件名 下面是一个将csv文件作为二进制数据发布并将二进制数据存储为csv文件的简单示例 package main import ( //"fmt" "net/http" "os" "io" "log" "github.com/gorilla/mux" ) func upl

我使用Postman REST API客户端将csv文件发布为二进制文件。我需要得到上传文件的文件名

下面是一个将csv文件作为二进制数据发布并将二进制数据存储为csv文件的简单示例

package main

import (   //"fmt"
           "net/http"
           "os"
           "io"
           "log"
           "github.com/gorilla/mux"
       )

func uploadData(w http.ResponseWriter, req *http.Request) {
    file, err := os.Create("hello.csv")
    _, err = io.Copy(file, req.Body)
    _ = err
}

func main(){
  router := mux.NewRouter()
  router.HandleFunc("/parse", uploadData).Methods("POST")
  log.Fatal(http.ListenAndServe(":8000", router))
}

您可以使用编码,例如表单数据,其中包括文件名,以便与邮递员一起上载文件。这将帮助您向服务器发送多部分/表单数据请求。之后,您可以从服务器端提取文件名

从服务器端

func uploadData(w http.ResponseWriter, req *http.Request) {
    _, header, _ := req.FormFile("demo")
    fmt.Println(header.Filename)
}

因为,没有与HTTP请求正文关联的文件名。如果要获取文件名,必须在URL中发送文件名

package main

import (   
           "net/http"
           "os"
           "io"
           "log"
           "github.com/gorilla/mux"

       )

func uploadData(w http.ResponseWriter, req *http.Request) {
    params := mux.Vars(req)
    file, err := os.Create(params["fileName"])
    _, err = io.Copy(file, req.Body)
    if err!=nil{
      log.Printf("Error while Posting data")
    }
}

func main(){
  router := mux.NewRouter()
  router.HandleFunc("/upload/{fileName}", uploadData).Methods("POST")
  log.Fatal(http.ListenAndServe(":8000", router))
}

没有与HTTP请求正文关联的文件名。@Flimzy我正在邮递员客户端中附加csv文件。我能够将发布的二进制数据保存到csv文件中。如何获取上载文件的文件名?文件名不在您发送的数据中。您无法获取从客户端未接收到的数据。您无法获取,因为正如我已经解释的,没有与HTTP响应正文相关联的文件名。感谢@Adrian,我理解它。awesome solution=没有理由认为表单数据本身比任何其他编码都好。您也可以使用JSON、XML、zip文件或任何其他包含filenameTotal的编码