File upload 如何限制从golang服务器上传和下载的速度?

File upload 如何限制从golang服务器上传和下载的速度?,file-upload,go,download,limit,File Upload,Go,Download,Limit,如何限制从golang服务器上传和下载的速度 我正在编写一个golang服务器,允许用户上传和下载文件。而且文件很大,大约1GB字节。我想将上传和下载速度限制在(例如)1MB/s(当然可以配置) 下面是我的上传代码: func uploadFile(w http.ResponseWriter, r *http.Request) { file, _, err := r.FormFile("file") if err != nil { http.Error(w, e

如何限制从golang服务器上传和下载的速度

我正在编写一个golang服务器,允许用户上传和下载文件。而且文件很大,大约1GB字节。我想将上传和下载速度限制在(例如)1MB/s(当然可以配置)

下面是我的上传代码:

func uploadFile(w http.ResponseWriter, r *http.Request) {
    file, _, err := r.FormFile("file")

    if err != nil {
        http.Error(w, err.Error(), 500)
        return
    }

    defer file.Close()

    os.MkdirAll(`e:\test`, os.ModePerm)
    out, err := os.Create(`e:\test\test.mpg`)
    if err != nil {
        http.Error(w, err.Error(), 500)
        return
    }

    defer out.Close()

    _, err = io.Copy(out, file)
    if err != nil {
        http.Error(w, err.Error(), 500)
    }
}

您可以查看以下内容的实现:

节流
,一个Go包,实现各种策略来控制对HTTP处理程序的访问。
开箱即用,它支持请求速率限制、请求的恒定间隔流和内存使用阈值以授予或拒绝访问,但它还提供了扩展其功能的机制

利率限制并不完全是你所需要的,但可以给你一个好主意

有一种算法可以帮助实现这样的速率限制。我找到了一个示例实现,您可以使用:

运行后,输出为:

Copied 1048576 bytes in 9.239607694s
您可以使用不同的bucket实现来提供所需的行为。在您的代码中,设置正确的令牌桶后,您将调用:

_, err = io.Copy(out, ratelimit.Reader(file, bucket))

这可能会限制文件写入速度,但我看到form task manager网络保持高速。我想限制网络数据传输速度。无论如何,这是我的问题。我应该使用r.MultipartReader()和reader.NextPart()而不是r.FromFile(),因为r.FromFile()将数据保存在系统临时文件中。谢谢!似乎节流会丢弃包,而不是减慢传输速度。。。还是我错过了什么?六年后的埃里克2201,我不太确定。不过当时它很有用。@Eric2201但是是的:。我可以看出这不是关于速度,而是关于限制请求。
_, err = io.Copy(out, ratelimit.Reader(file, bucket))