它处理 http PUT 请求。对于小文件,它工作正常:
$ curl -v http://192.168.1.10:9193/ -T red.tx
* Trying 192.168.1.10...
* Connected to 192.168.1.10 (192.168.1.10) port 9193 (#0)
> PUT /red.tx HTTP/1.1
> Host: 192.168.1.10:9193
> User-Agent: curl/7.47.0
> Accept: */*
> Content-Length: 19697247
> Expect: 100-continue
>
< HTTP/1.1 100 Continue
* We are completely uploaded and fine
< HTTP/1.1 200 OK
< Date: Fri, 26 Jul 2019 00:43:43 GMT
< Content-Length: 0
< Content-Type: text/plain; charset=utf-8
<
* Connection #0 to host 192.168.1.10 left intact
然而 - 发送一个大于 1G 的大文件,它会耗尽内存。这是可以理解的,因为整个正文被读作contents, err := ioutil.ReadAll(r.Body)
runtime: out of memory: cannot allocate 536870912-byte block (537919488 in use)
fatal error: out of memory
runtime stack:
runtime.throw(0x259a35, 0xd)
/usr/lib/go-1.7/src/runtime/panic.go:566 +0x78
runtime.largeAlloc(0x1ffffe00, 0x10616f01, 0x10637afc)
/usr/lib/go-1.7/src/runtime/malloc.go:776 +0xc8
runtime.mallocgc.func1()
/usr/lib/go-1.7/src/runtime/malloc.go:669 +0x34
runtime.systemstack(0x10aa8200)
/usr/lib/go-1.7/src/runtime/asm_arm.s:247 +0x80
runtime.mstart()
/usr/lib/go-1.7/src/runtime/proc.go:1079
请告诉我从 r.Body 读取并将其写入文件的正确方法。谢谢!
倚天杖
相关分类