محدودیت حجم آپلود
این مثال نحوه استفاده از http.MaxBytesReader برای محدود کردن دقیق حداکثر حجم فایلهای آپلود شده و بازگرداندن وضعیت 413 هنگام تجاوز از محدودیت را نشان میدهد.
کد نمونه جزئیات را ببینید.
نحوه کار
- تعریف محدودیت — یک ثابت
MaxUploadSize(۱ مگابایت) سقف سختافزاری آپلودها را تعیین میکند. - اعمال محدودیت —
http.MaxBytesReaderبدنهc.Request.Bodyرا بستهبندی میکند. اگر کلاینت بیش از حد مجاز بایت ارسال کند، reader متوقف شده و خطا برمیگرداند. - تجزیه و بررسی —
c.Request.ParseMultipartFormخواندن را فعال میکند. کد*http.MaxBytesErrorرا بررسی میکند تا وضعیت413 Request Entity Too Largeبا پیام واضح برگرداند.
package main
import ( "fmt" "net/http"
"github.com/gin-gonic/gin")
const ( MaxUploadSize = 1 << 20 // 1 MB)
func uploadHandler(c *gin.Context) { // Wrap the body reader so only MaxUploadSize bytes are allowed c.Request.Body = http.MaxBytesReader(c.Writer, c.Request.Body, MaxUploadSize)
// Parse multipart form if err := c.Request.ParseMultipartForm(MaxUploadSize); err != nil { if _, ok := err.(*http.MaxBytesError); ok { c.JSON(http.StatusRequestEntityTooLarge, gin.H{ "error": fmt.Sprintf("file too large (max: %d bytes)", MaxUploadSize), }) return } c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return }
file, _, err := c.Request.FormFile("file") if err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": "file form required"}) return } defer file.Close()
c.JSON(http.StatusOK, gin.H{ "message": "upload successful", })}
func main() { r := gin.Default() r.POST("/upload", uploadHandler) r.Run(":8080")}نحوه استفاده از curl:
curl -X POST http://localhost:8080/upload \ -F "file=@/Users/appleboy/test.zip" \ -H "Content-Type: multipart/form-data"