Zoom cloud recording https wrong filename and extension. Youtube Invalid array length error

Describe the issue/error/question

Using HTTPS module I get with Zoom file, it comes with name instead GMT20230120-165512_Recording_1760x900.mp4 (if i get link via browser) as random set of letters and file extension too.

The file takes 465 megabytes this fits in this parameter - N8N_PAYLOAD_SIZE_MAX=1024 megabytes in vi docker-compose.yaml environments

Got error in Youtube. Invalid array length

I don’t understand what’s wrong, I assume it’s the file name that comes from the API request. The request is correct according zoom docs
https://marketplace.zoom.us/docs/api-reference/zoom-api/events/#operation/recording.completed

I’ve tried uploading via Header credentials and the result is the same, no correct file name is received.
in zoom dev forum i check i need to add flag -O for original name, but i don’t think it correct and i don’t know how to do that. )
Please help.

What is the error message (if any)?

Zoom - wrong filename and extension

Youtube
ERROR: UNKNOWN ERROR - check the detailed error for more information
Invalid array length

Please share the workflow

Share the output returned by the last node

NodeApiError: UNKNOWN ERROR - check the detailed error for more information
    at Object.googleApiRequest (/usr/local/lib/node_modules/n8n/node_modules/n8n-nodes-base/dist/nodes/Google/YouTube/GenericFunctions.js:24:15)
    at Object.execute (/usr/local/lib/node_modules/n8n/node_modules/n8n-nodes-base/dist/nodes/Google/YouTube/YouTube.node.js:587:84)
    at Workflow.runNode (/usr/local/lib/node_modules/n8n/node_modules/n8n-workflow/dist/Workflow.js:659:28)
    at /usr/local/lib/node_modules/n8n/node_modules/n8n-core/dist/WorkflowExecute.js:585:53

Information on your n8n setup

  • **n8n version:0.212.0 (and 0.210.2 too)
  • **Database you’re using (default: SQLite):Default
  • **Running n8n with the execution process: main
  • **Running n8n via [Docker, npm, n8n.cloud, desktop app]: Docker
  • **Digital Ocean - 2GB Memory, 1 CPU

i found a bug in https module (i don’t know how to get rid of that)

URL of download any Zoom record contains dots, for example
https:// us06web. zoom.us / rec / webhook_download / eR_gtb8uTs1PI9u41mpUuKhWXPY0FtFTyO1Xr_dsLssqcT-lmpVmhUE9sFDMS5cJWcbSJVJ82RPDZ3hE.bLLjupyNNgQ_bDrM/L3Xnkh6lVlSKP1fBJIoLOXA8mkAI805-vRheF8urxoOqdKUJrYrjuXlfjtpMtsE**.**qQZ98vYOWMJuXhHp

And original filename get after redirect (Follow Redirects checked).

BUT https module takes part of url as filename and extention, with example below showing as:

filename:
lmpVmhUE9sFDMS5cJWcbSJVJ82RPDZ3hE.bLLjupyNNgQ_bDrM/L3Xnkh6lVlSKP1fBJIoLOXA8mkAI805-vRheF8urxoOqdKUJrYrjuXlfjtpMtsE

extension:
qQZ98vYOWMJuXhHp

As a result Zoom cloud recording https wrong filename and extension. instead of original filename for example GMT20230119-212611_Recording_avo_640x360

without .qQZ98vYOWMJuXhHp - html with “invalid download Key (-1)” text error as expected

SOLVED via Function Node:

items[0].binary.data.fileName = ‘newName’
items[0].binary.data.fileExtension = ‘mp4’

return items;

1 Like

Update - if video about 214 MB or above - Invalid array length on youtube even though all previous settings have been made and the name of the binary has been changed.

Checked - that’s similar error
Upload videos to YouTube resolved in 0.179 hmmm strange.

Hi @lightcom, I am sorry for the trouble with uploading larger files. I know @netroy is currently in the process of improving the support for working with larger binary data. Perhaps he can confirm if the YouTube node is on the respective roadmap here?

As for the download problem, perhaps you can check if the Zoom server returns a content-disposition header? This header is unfortunately ignored by n8n, but you could parse it as described here (and perhaps you might want to leave a vote on the respective feature request too, to bring n8n more in line with web standards):

The YouTube upload issues are addressed by this PR.

1 Like

Thank you, i think chuked upload may solve the problem.
Tryin the tips later because i own myself rename of files, and it works fine.

Yes, Zoom header contains value in header
content-disposition:attachment

But solution not helps me, result - blank filename and random letters as extension

I think that’s because on the step back we get extension as part of url (url contains dot “.” )

Any chance you can share the JSON payload you are getting from Zoom? You can of course redact all confidential values, just not the content-disposition header value itself. I can then see if I can turn that value into a proper filename :slight_smile:

I can send all payload data via PM?
Because it contains key for download

1 Like

You can sure send me a DM if you don’t want to post in public. Not sure yet when I’ll get to try this out though.

1 Like

details sent

1 Like

Thanks @lightcom, got your message. It looks like the content-disposition header sent by zoom does not include an actual filename (which is why the logic would from the linked thread would fail). You can find an example of the header I was expecting at MIME - Wikipedia.

So I think you would need to set your file name using a different approach. I’ll respond to your message with a quick example using the topic name, but you can of course adjust this as needed (adding the start time etc. for example).

@lightcom -
I am currently in the process of backing up all my Zoom recordings to Google Drive. Would you mind sharing your complete workflow with me? I’m interested in sharing it with others as a starting point, (n8n workflow templates)

I believe what you have set up would be an excellent foundation.
Could you please share your entire workflow staring form the HTTP call pulling all the recordings from the Zoom API?

1 Like

I am using webhook data
and i have another one with api call, which is the best?

it’s easy - you have zoom module, next google module. In name of the file - generate your name and folder where you put data. done

Can you share your full workflow from pulling the list of recoding’s from zoom?

Since I had 300 gigabytes in the cloud, I had to clear up to 15 gigabytes. I gathered a list of all the files, put the record data and download url into google sheets, then used ANT Downloader to download all the files. It would have taken much longer through the n8n.

How did you get the Google Sheet with all the download_token and downland URL?

accountemail = zoomemail
in google sheet node in download_url add ?access_token=YOURACCESSTOKEN from jwt app, so you can download. (make sure that download link expired after few minutes)

https://marketplace.zoom.us/docs/guides/guides/managing-recordings/

2 Likes