gpt4 book ai didi

go - 限制 FormFile 中的文件大小

转载 作者:IT王子 更新时间:2023-10-29 00:33:44 25 4
gpt4 key购买 nike

我让用户使用 FormFile 上传文件。我应该在什么时候检查文件大小是否太大。当我做的时候

 file, header, fileErr := r.FormFile("file")

一个文件对象已经创建。那么我是否已经产生了阅读整个文件的成本?

https://golang.org/pkg/net/http#Request.FormFile

最佳答案

使用http.MaxBytesReader限制从请求中读取的字节数。在调用 ParseMultiPartForm 或 FormFile 之前,执行这一行:

 r.Body = http.MaxBytesReader(w, r.Body, max)

其中 r*http.Requestwhttp.Response

MaxBytesReader 限制为整个 请求正文而不是单个文件读取的字节数。当只有一个文件上传时,请求正文大小的限制可以很好地近似于文件大小的限制。如果您需要对一个或多个文件实现特定限制,请将 MaxBytesReader 限制设置得足够大以应对所有预期的请求数据并检查 FileHeader.Size对于每个文件。

当超出 http.MaxBytesReader 限制时,服务器会停止读取请求并在处理程序返回后关闭连接。

如果您想限制使用的内存量而不是请求体大小,请调用 r.ParseMultipartForm(maxMemory)在调用 r.FormFile() 之前。这将为文件部分使用最多 maxMemory 字节,其余部分存储在磁盘上的临时文件中。此调用不限制从客户端读取的总字节数或上传文件的大小。

检查 request Content-Length header 不起作用有两个原因:

  • 没有为分 block 请求主体设置内容长度。
  • 服务器可以读取整个请求主体以支持连接保持事件。突破 MaxBytesReader 限制是确保服务器停止读取请求正文的唯一方法。

关于go - 限制 FormFile 中的文件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28073395/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com