go - golang 将文件发布到烧瓶服务器
问题描述
我尝试创建应用程序,它将文件从页面上的表单发送到 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 服务器不发送文件或烧瓶服务器没有得到它。
Golang 版画
Uploaded File: 1.jpg
File Size: 114940
所以它接收文件。
UPD:找到了这个答案:How to redirect multipart POST request to a second server in Golang? 并让我的golang服务器像那里一样。现在它不解析文件,而是将整个请求发送到未编辑的烧瓶服务器。而且更容易。
解决方案
您不能直接将FormFile
作为输入传递给 post 方法,而是需要创建一个包含该文件的多部分对象。
推荐阅读
- swift - How to use MVC pattern in Swift for Networking?
- android - RxJava using multiple observable (api calls) per one execution
- blueprism - How to identify specific IE window in blueprism when more than one window has the same title
- pvlib - Model Chain example PVLIB - don't trust in 1 axis tracking AC output
- r - caret::bagEarth and reproducibility
- oracle-sqldeveloper - Oracle SQL Developer + AWS Redshift:只能查看表
- laravel - in sql the following query is given my desired output but in laravel model how can I retrieve it?
- html - Download a html report, with an image inside, from a shiny app hosted in shinyapps.io
- excel - VBA 数据透视表字段选择 Excel
- python - pandas - 将 d-mmm-yy 转换为日期时间对象