grafana/k6 · error

creating multipart form file: %w

Error message

creating multipart form file: %w

What it means

Raised in newFileUploadRequest when fw.CreateFormFile('file', psu.Name) fails to create the file part header of the multipart form. The input at fault is psu.Name, the file name supplied by the presigned-URL response. CreateFormFile rejects names containing '\r' or '\n' (header injection guard), so this fires when the remote service returns a file name with embedded newline characters.

Source

Thrown at internal/js/modules/k6/browser/storage/file_persister.go:223

	resp PresignedURLResponse,
	data io.Reader,
) (*http.Request, error) {
	// we don't support multiple presigned URLs at the moment.
	psu := resp.URLs[0]

	// copy all form fields received from a presigned URL
	// response to the multipart form fields.
	var form bytes.Buffer
	fw := multipart.NewWriter(&form)
	for k, v := range psu.FormFields {
		if err := fw.WriteField(k, v); err != nil {
			return nil, fmt.Errorf("writing form field key %q and value %q: %w", k, v, err)
		}
	}
	// attach the file data to the form.
	ff, err := fw.CreateFormFile("file", psu.Name)
	if err != nil {
		return nil, fmt.Errorf("creating multipart form file: %w", err)
	}
	if _, err := io.Copy(ff, data); err != nil {
		return nil, fmt.Errorf("copying file data to multipart form: %w", err)
	}
	if err := fw.Close(); err != nil {
		return nil, fmt.Errorf("closing multipart form writer: %w", err)
	}

	req, err := http.NewRequestWithContext(
		ctx,
		psu.Method,
		psu.PresignedURL,
		&form,
	)
	if err != nil {
		return nil, fmt.Errorf("creating new request: %w", err)
	}
	req.Header.Set("Content-Type", fw.FormDataContentType())

View on GitHub (pinned to 01ffac6f24)

Solutions

  1. Retry the persist; a fresh presigned response will carry a new file name
  2. Report to k6 Cloud support if file names are consistently malformed
  3. Check whether custom artifact names/options introduce newline characters
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at internal/js/modules/k6/browser/storage/file_persister.go:223 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of grafana/k6@01ffac6f24 (2026-08-18). Data as JSON: /api/errors/8baeaffbe9d65e58. Report an issue: GitHub.