discourse/discourse · error · Discourse::InvalidParameters
All parts must have an etag and a valid part number
Error message
All parts must have an etag and a valid part number
What it means
Error "All parts must have an etag and a valid part number" thrown in discourse/discourse.
Source
Thrown at lib/external_upload_helpers.rb:246
).performed!
external_upload_stub =
ExternalUploadStub.find_by(unique_identifier: unique_identifier, created_by: current_user)
return render_404 if external_upload_stub.blank?
message = check_multipart_upload_exists(external_upload_stub)
return render_404(message) if message.present?
store = multipart_store(external_upload_stub.upload_type)
parts =
parts
.map do |part|
part_number = part[:part_number]
etag = part[:etag]
part_number = validate_part_number(part_number)
if etag.blank?
raise Discourse::InvalidParameters.new(
"All parts must have an etag and a valid part number",
)
end
# this is done so it's an array of hashes rather than an array of
# ActionController::Parameters
{ part_number: part_number, etag: etag }
end
.sort_by { |part| part[:part_number] }
begin
store.complete_multipart(
upload_id: external_upload_stub.external_upload_identifier,
key: external_upload_stub.key,
parts: parts,
)
rescue Aws::S3::Errors::ServiceError => err
return(View on GitHub (pinned to 1b2d7253e8)
When it happens
Trigger: Thrown at lib/external_upload_helpers.rb:246 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of discourse/discourse@1b2d7253e8 (2026-08-26).
Data as JSON: /api/errors/0c3a64aeee6442db.
Report an issue: GitHub.