1.使用golang 做web服务器
2.客户端使用http put的形式,上传文件到此web服务器
3.假如上传的文件很大,服务器可否支持,比如上传到服务器100k大小后就,存一个chunk文件,然后释放那部分内存,以此类推(觉得类似于管道)
4.目前我知道 http.Request.Body 可以获取上传之后的文件具体内容,并且它是一个 io.ReadCloser类型
5.再问一下http.Request.Body是服务器这边全部接收到了内容之后才能读取到吗?
6.http.Request.ContentLength是如何得到的,是服务器这边全部接收到了内容之后算的?还是客户端那边带过来的
请大家看一下应该如何实现这个功能
我的实验代码也贴一下,大家看看有什么问题

package main

import (
    "os"
    "net/http"
    "github.com/julienschmidt/httprouter"
    "fmt"
)

func main() {
    router := httprouter.New()
    //注册上传路由,及处理方法
    router.PUT("/upload_file/:file_name",handleUploadFile)

    http.ListenAndServe("0.0.0.0:10086", router)
}

func handleUploadFile(rw http.ResponseWriter, req *http.Request, p httprouter.Params){
    real_file_name := p.ByName("file_name")
    defer req.Body.Close()
    buf := make([]byte, 65536) // 64k per chunk
    filename := fmt.Sprintf("./chunk/%s", real_file_name)    //文件名
    fmt.Println(filename)
    //创建一个文件
    file, _ := os.Create(filename)
    defer file.Close()

    num := 0
    for {
        num += 1
        n, err := req.Body.Read(buf)
        fmt.Printf("第%d次循环,读取%d个字节\n",num,n)
        file.Write(buf[:n])
        if err != nil {
            fmt.Println(err)
            break
        }
    }

    rw.Write([]byte("done\n"))
}