2012-07-30 51 views
1

去通過HTTP接收二進制數據的最佳方式是什麼?就我而言,我想將zip文件發送到我的應用程序的REST API。具體到goweb的例子會很好,但是net/http也很好。請求主體在Go中通過HTTP接收二進制數據

+0

你是什麼意思與「去接收「,你是指如何最好地實現它並將其解析爲GO,還是指的是如何以REST風格最好地發送它? – Cleric 2012-07-30 03:05:07

+0

如何在Go中實現和解析它,儘管有關RESTful最佳實踐的任何意見也不勝感激。 – cmhobbs 2012-07-30 03:09:37

回答

8

剛讀它

喜歡的東西

package main 

import ("fmt";"net/http";"io/ioutil";"log") 

func h(w http.ResponseWriter, req *http.Request) { 
    buf, err := ioutil.ReadAll(req.Body) 
    if err!=nil {log.Fatal("request",err)} 
    fmt.Println(buf) // do whatever you want with the binary file buf 
} 

較爲合理的做法是將文件複製到一些流

defer req.Body.Close() 
f, err := os.TempFile("", "my_app_prefix") 
if err!=nil {log.Fatal("cannot open temp file", err)} 
defer f.Close() 
io.Copy(f, req.Body) 
+1

請注意,這種處理方式將整個請求體讀入內存。在現實世界中,您可能想要限制大小,將數據存儲在磁盤上或其他內容。 – 2012-07-30 08:36:27

+0

@EvanShaw當然,但這就是讀者想要的...... – 2012-07-30 13:23:38

+0

限制它是明智的,但我最感興趣的是一個例子來教育自己。 – cmhobbs 2012-07-31 20:24:05

相關問題