-2

我正在使用 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))
}
4

2 回答 2

6

您可以使用编码,例如form-data,其中包括使用邮递员上传文件的文件名。这将帮助您multipart/form-data向服务器发送请求。之后,您可以从服务器端提取文件名。

在此处输入图像描述

从服务器端

func uploadData(w http.ResponseWriter, req *http.Request) {
    _, header, _ := req.FormFile("demo")
    fmt.Println(header.Filename)
}
于 2018-12-17T14:27:48.270 回答
2

因为,没有与 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))
}
于 2018-12-17T14:35:49.037 回答