2016-10-15 26 views
0

我已經實現了基於gin(golang web框架)的http服務器。golang服務器:如何連續檢索多個文件

我張貼2張圖片服務器curl multipart/form-data

curl -X POST -F [email protected] -F [email protected] -H "Content-Type: multipart/form-data" "http://server:port/path"

服務器的代碼如下所示:

func extractImgs(c *gin.Context) { 
    prefix := "prefix" 
    for ix := 0; ix < 2; ix++ { 
     file, _, err := c.Request.FormFile(prefix + strconv.Itoa(ix)) 
     if err != nil { 
      // do sth. 
      return 
     } 
     face_recognize_async(file) 
    } 
} 

你知道,人臉識別是費時,我希望工作 - 流量爲:

get_1st_img -> recognize_face -> get_2nd_img -> recognize_face -> ... 

我打印執行時間,檢索後返回全部2個文件

我的問題:

1)如何不斷檢索這些文件,就像遍歷鏈表;

2)http multipart是一個不錯的選擇,我應該使用TCP/STCP來實現嗎?

+2

是什麼你face_recognize_async樣子?我的猜測是,它只是名義上的異步,並且實際上是阻止的。 –

+1

整個http FORM POSt必須在可以解析和操作其值之前發佈。您必須先等待所有文件上傳。然後,正如@Alexey所說,異步func實際上可能不是異步。它是否是線程安全的?如果是這樣,上傳完成後,請關閉兩個Goroutines。 – eduncan911

+0

@AlexeySoshin face_recognize_async實際上是異步的,我會將圖片發送到其他GPU服務器。 –

回答

1

由於FormFile從張貼的表單索引文件,它需要整個表單已被解析。從FormFile文檔:

FormFile在必要時調用ParseMultipartForm和ParseForm。

如果你想在一次流時多形式的一個部分,使用Request.MultipartReader

相關問題