2012-07-30 46 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

相关问题