n8n-io/n8n · error · NodeOperationError

Binary property name or download URL is required

Error message

Binary property name or download URL is required

What it means

Guard in getFileStreamFromUrlOrBinary: this branch runs when no downloadUrl was passed in. It then reads the 'binaryPropertyName' parameter (default 'data'); if that resolves falsy, the node can neither download nor read a binary, so it throws. Note the description 'Error uploading file' is somewhat misleading — the failure is in sourcing the input, not the upload itself.

Source

Thrown at packages/@n8n/nodes-langchain/nodes/vendors/GoogleGemini/helpers/utils.ts:149

			method: 'GET',
			url: downloadUrl,
			qs,
			returnFullResponse: true,
			encoding: 'stream',
		})) as { body: Stream; headers: IDataObject };

		const contentType = downloadResponse.headers['content-type'] as string | undefined;
		const mimeType = contentType?.split(';')?.[0] ?? fallbackMimeType ?? 'application/octet-stream';

		return {
			stream: downloadResponse.body,
			mimeType,
		};
	}

	const binaryPropertyName = this.getNodeParameter('binaryPropertyName', i, 'data');
	if (!binaryPropertyName) {
		throw new NodeOperationError(
			this.getNode(),
			'Binary property name or download URL is required',
			{
				description: 'Error uploading file',
			},
		);
	}

	const binaryData = this.helpers.assertBinaryData(i, binaryPropertyName);
	if (!binaryData.id) {
		const buffer = await this.helpers.getBinaryDataBuffer(i, binaryPropertyName);
		return {
			buffer,
			mimeType: binaryData.mimeType,
		};
	}

	return {

View on GitHub (pinned to 5ac6606e81)

Solutions

  1. Set the binary property name (default 'data') to the key under which the upstream node wrote the file.
  2. If you intended to fetch from a URL, fill the download URL field / pass downloadUrl so this branch is skipped.
  3. Verify the upstream node (Read Binary File, HTTP Request, etc.) actually wrote binary data under that property name.

Example fix

// before — empty binaryPropertyName and no url
const binaryPropertyName = '';

// after
const binaryPropertyName = 'data';
Defensive patterns

Strategy: validation

Validate before calling

const binaryPropertyName = String(this.getNodeParameter('binaryPropertyName', i, 'data') ?? '').trim();
if (!downloadUrl && !binaryPropertyName) {
  throw new Error('Provide either a download URL or a binary property name');
}

Type guard

function hasFileSource(downloadUrl: unknown, binaryPropertyName: unknown): boolean {
  return (typeof downloadUrl === 'string' && downloadUrl.length > 0)
      || (typeof binaryPropertyName === 'string' && binaryPropertyName.trim().length > 0);
}

Prevention

When it happens

Trigger: Caller invoked transferFile/uploadToFileSearchStore without a downloadUrl AND the node's 'binaryPropertyName' parameter is empty/blank — e.g. user cleared the field, or an expression evaluated to ''.

Common situations: The File/Search operation is configured to read from binary but the binary property name field was emptied; the operation expected a URL but none was supplied and no binary fallback was set.

Related errors


AI-assisted analysis of n8n-io/n8n@5ac6606e81 (2026-08-12). Data as JSON: /api/errors/e09b05eb48ace6e0. Report an issue: GitHub.