googleapis / google-api-nodejs-client

Google's officially supported Node.js client library for accessing Google APIs. Support for authorization and authentication with OAuth 2.0, API Keys and JWT (Service Tokens) is included.
https://googleapis.dev/nodejs/googleapis/latest/
Apache License 2.0
11.46k stars 1.92k forks source link

Google Drive | 500 Unknown Error Yet File Still Created #3559

Open jordanparker6 opened 2 months ago

jordanparker6 commented 2 months ago

An 'Unknown Error' with code 500 keeps returning when using the Node SDK and google drive to upload a file.

I have tested that my OAuth client is working as I am able to retrieve file metadata from the drive. However, when I go to run the upload script below I get a 500 error, despite the file actually being created in Google Drive...

Environment details

Steps to reproduce

Error Message

Google Drive API Error: {
  code: 500,
   message: 'Unknown Error.',
   errors: [ {} ],
  status: 'UNKNOWN'
}
export async function uploadFileToGoogleDrive(client: drive_v3.Drive, file: File, folderId?: string) {
    const upload = async () => {
        const response = await client.files.create({
            requestBody: {
                name: file.name,
                mimeType: file.type,
                ...(folderId ? { parents: [folderId] } : {})
            },
            media: {
                mimeType: file.type,
                body: Readable.from(file.stream()),
            },
            fields: 'id,name,mimeType,webViewLink,thumbnailLink',
        });
        console.log(response);
        return response;
    };

    try {
        // const response = await retry(upload, {
        //     retries: 2,
        //     factor: 2,
        //     minTimeout: 1000,
        //     maxTimeout: 60000,
        //     randomize: true,
        //     onFailedAttempt: error => {
        //         console.error(`Attempt ${error.attemptNumber} failed. There are ${error.retriesLeft} retries left.`);
        //     }
        // });
        const response = await upload()
        console.log('file uploaded', response)
        return response;
    } catch (err) {
        console.error('Error uploading file to Google Drive: ', err.stack);
        if (err.response && err.response.data && err.response.data.error) {
            console.error('Google Drive API Error:', err.response.data.error);
        }
        logger.error('Error uploading file to Google Drive', err);
        throw err;
    }
}