golang 将文件发布到烧瓶服务器

Posted

技术标签:

【中文标题】golang 将文件发布到烧瓶服务器【英文标题】:golang post file to flask server 【发布时间】:2021-11-21 04:58:47 【问题描述】:

我尝试创建应用程序,它将文件从页面上的表单发送到 golang 服务器,然后将其重新发送到烧瓶服务器。

我的 golang 服务器:

func api_upload_model(w http.ResponseWriter, r *http.Request) 
    r.ParseMultipartForm(50 << 20)
    file, handler, err := r.FormFile("Model")
    if err != nil 
        fmt.Println("Error Retrieving the File")
        fmt.Println(err)
        return
    
    fmt.Printf("Uploaded File: %+v\n", handler.Filename)
    fmt.Printf("File Size: %+v\n", handler.Size)
    
    resp, err := http.Post(*URL here*, "multipart/form-data", file)
    if err != nil 
        fmt.Println("Error Sending the File")
        fmt.Println(err)
        return
    
    w.Header().Set("Content-Type", "text/html")
    buffer, _ := ioutil.ReadAll(resp.Body)
    _, err = w.Write(buffer)
    if err != nil 
        fmt.Println("Error Sending the File")
        fmt.Println(err)
        return
    


func main() 
    router := chi.NewRouter()
    router.Post("/api/upload_model", api_upload_model)
    http.ListenAndServe(":8080", router)


烧瓶处理程序:

@app.route('/upload_model', methods=['POST'])
def upload_model():
    log("Inference server", "123")
    name = request.args.get('name', None)
    if name is None:
        return "Error: bad request parameters."
    print(str(request))
    if 'file' not in request.files: #I know that I don't set filename to 'file' but request.files is empty anyway
        return "No file"
    file = request.files['file']
    if file:
        filename = secure_filename(name)
        file.save(os.path.join("data/models", name))
        return "200"

我从烧瓶服务器得到的:

<Request 'http://*URL here*/upload_model?name=1.jpg' [POST]>: 

我尝试打印 request.files:它是空的。 所以,golang server 不发送文件或者flask server 没有收到。

Golang 打印

Uploaded File: 1.jpg
File Size: 114940

所以它接收文件。

更新: 找到这个答案:How to redirect multipart POST request to a second server in Golang? 并让我的golang服务器像那里一样。现在它不解析文件,而是将整个请求发送到未编辑的烧瓶服务器。而且更容易。

【问题讨论】:

【参考方案1】:

您不能直接将FormFile 作为输入传递给 post 方法,而是需要创建一个包含该文件的多部分对象。

查看示例 How to use multipart in golang

【讨论】:

以上是关于golang 将文件发布到烧瓶服务器的主要内容,如果未能解决你的问题,请参考以下文章

如何将烧瓶端口从容器发布到主机[重复]

如何将网络摄像头帧从客户端发送到烧瓶服务器?

您可以将 HTTPS 功能添加到 python 烧瓶 Web 服务器吗?

将带有 fetch 的 POST 发送到烧瓶时的端口问题

烧瓶框架可以将实时数据从服务器发送到客户端浏览器吗?

如何将烧瓶服务器作为便携式精灵运行