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 将文件发布到烧瓶服务器的主要内容,如果未能解决你的问题,请参考以下文章