gofiber/fiber · error

create file error: %w

Error message

create file error: %w

What it means

Returned in addFormFile (client/hooks.go:318) when multipart.Writer.CreateFormFile fails while building a file part. CreateFormFile writes the part headers (Content-Disposition and Content-Type: application/octet-stream) into the body writer; failure indicates the underlying writer rejected the header write or the field/file name is invalid.

Source

Thrown at client/hooks.go:318

}

func addFormFile(mw *multipart.Writer, f *File, fileBuf *[]byte) error {
	// If reader is not set, open the file.
	if f.reader == nil {
		var err error
		f.reader, err = os.Open(f.path)
		if err != nil {
			return fmt.Errorf("open file error: %w", err)
		}
	}

	// Ensure the file reader is always closed after copying.
	defer f.reader.Close() //nolint:errcheck // not needed

	// Create form file and copy the content.
	w, err := mw.CreateFormFile(f.fieldName, f.name)
	if err != nil {
		return fmt.Errorf("create file error: %w", err)
	}

	if _, err := io.CopyBuffer(w, f.reader, *fileBuf); err != nil {
		return fmt.Errorf("failed to copy file data: %w", err)
	}

	return nil
}

// parserResponseCookie parses the Set-Cookie headers from the response and stores them.
func parserResponseCookie(c *Client, resp *Response, req *Request) error {
	var err error
	for key, value := range resp.RawResponse.Header.Cookies() {
		cookie := fasthttp.AcquireCookie()
		if err = cookie.ParseBytes(value); err != nil {
			fasthttp.ReleaseCookie(cookie)
			break
		}

View on GitHub (pinned to 9a4c7e57fe)

Solutions

  1. Keep field names and filenames short and free of CR/LF characters.
  2. Avoid releasing/reusing the Request concurrently with body building.
  3. If the body is large, confirm it fits the configured request size or use streaming.
  4. Inspect the wrapped error to determine whether it is a size-limit or connection-level failure.

Example fix

// before — very long / unsafe filename
req.SetFiles("/tmp/" + strings.Repeat("a", 500) + ".bin")

// after — short, safe filename
req.SetFiles("/tmp/upload.bin")
Defensive patterns

Strategy: validation

Validate before calling

// Ensure field/file names are short and free of CR/LF.
var safeName = regexp.MustCompile(`^[\x20-\x7e]{1,128}$`)
func safePartName(s string) bool {
    if strings.ContainsAny(s, "\r\n") { return false }
    return safeName.MatchString(s)
}

Type guard

func safePartName(s string) bool {
    return !strings.ContainsAny(s, "\r\n") && safeName.MatchString(s)
}

Prevention

When it happens

Trigger: The body writer errors while emitting the part header (buffer overflow, transport teardown), or the fieldName/name arguments produce an invalid header. Occurs during body construction of a multipart upload after the file has been successfully opened.

Common situations: Uploading with a very long filename or field name that overflows the request buffer; a body-stream destination closed mid-build; concurrent reuse/release of the Request; an internal fasthttp request buffer limit being exceeded.

Related errors


AI-assisted analysis of gofiber/fiber@9a4c7e57fe (2026-08-04). Data as JSON: /data/errors/053af4714dc58fe9.json. Report an issue: GitHub.