MCPcopy
hub / github.com/gofiber/fiber / SaveFileToStorage

Method SaveFileToStorage

ctx.go:533–572  ·  ctx.go::DefaultCtx.SaveFileToStorage

SaveFileToStorage saves any multipart file to an external storage system.

(fileheader *multipart.FileHeader, path string, storage Storage)

Source from the content-addressed store, hash-verified

531
532// SaveFileToStorage saves any multipart file to an external storage system.
533func (c *DefaultCtx) SaveFileToStorage(fileheader *multipart.FileHeader, path string, storage Storage) error {
534 if fileheader == nil {
535 return ErrFileHeaderNil
536 }
537
538 file, err := fileheader.Open()
539 if err != nil {
540 return fmt.Errorf("%w: %q: %w", ErrFileOpen, fileheader.Filename, err)
541 }
542 defer file.Close() //nolint:errcheck // not needed
543
544 maxUploadSize := c.app.config.BodyLimit
545 if maxUploadSize <= 0 {
546 maxUploadSize = DefaultBodyLimit
547 }
548
549 if fileheader.Size > 0 && fileheader.Size > int64(maxUploadSize) {
550 return fmt.Errorf("%w: %q: %w", ErrFileRead, fileheader.Filename, fasthttp.ErrBodyTooLarge)
551 }
552
553 buf := bytebufferpool.Get()
554 defer bytebufferpool.Put(buf)
555
556 limitedReader := io.LimitReader(file, int64(maxUploadSize)+1)
557 if _, err = buf.ReadFrom(limitedReader); err != nil {
558 return fmt.Errorf("%w: %q: %w", ErrFileRead, fileheader.Filename, err)
559 }
560
561 if buf.Len() > maxUploadSize {
562 return fmt.Errorf("%w: %q: %w", ErrFileRead, fileheader.Filename, fasthttp.ErrBodyTooLarge)
563 }
564
565 data := append([]byte(nil), buf.Bytes()...)
566
567 if err := storage.SetWithContext(c.Context(), path, data, 0); err != nil {
568 return fmt.Errorf("%w: %q to %q: %w", ErrFileStore, fileheader.Filename, path, err)
569 }
570
571 return nil
572}
573
574// Secure returns whether a secure connection was established.
575func (c *DefaultCtx) Secure() bool {

Callers

nothing calls this directly

Calls 9

ContextMethod · 0.95
ErrorfMethod · 0.65
CloseMethod · 0.65
GetMethod · 0.65
PutMethod · 0.65
ReadFromMethod · 0.65
LenMethod · 0.65
BytesMethod · 0.65
SetWithContextMethod · 0.65

Tested by

no test coverage detected