How to upload file type in nodejs googleapis (in express multer)
Problem
I have a problem in uploding pdf file from from fontend in Nodejs so the problem is how to convert file type to correct form to upload to google drive my file type is like this { fieldname: 'file', originalname: 'test.pdf', encoding: '7bit', mimetype: 'application/pdf', buffer: <Buffer 25 50 44 46 2d 31 2e 34 0a 25 20 e2 e3 cf d3 0a 34 0a 30 0a 6f 62 6a 0a 3c 3c 0a 2f 54 79 70 65 0a 2f 43 61 74 61 6c 6f 67 0a 2f 4e 61 6d 65 73 0a 3c ... >, size: 150251 } and my code is like this ` const {google} = require('googleapis') const drive = google.drive('v3') const app = express() const upload = multer() app.post( 'test-upload-pdf-file', upload.single('file'), (req, res, next) => { drive.files.create({ resource: { mimeType: 'application/pdf'}, media: {mimeType: 'application/pdf', body: req.file.buffer}, fields: 'id' }, function (err, file) { } )`
Unverified for your environment
Select your OS to check compatibility.
1 Fix
Fix PDF File Upload to Google Drive in Node.js with Multer
The issue arises because the Google Drive API requires the correct configuration of the media object when uploading files. The media object must include the correct mimeType and the file content, which is currently being passed correctly, but the request may be missing proper error handling and response management.
Awaiting Verification
Be the first to verify this fix
- 1
Install Required Packages
Ensure that you have the necessary packages installed, including 'express', 'multer', and 'googleapis'. If not, install them using npm.
bashnpm install express multer googleapis - 2
Configure Google Drive API
Set up the Google Drive API with proper authentication. Ensure that you have the OAuth2 client set up and authorized to access Google Drive.
javascriptconst {google} = require('googleapis'); const oauth2Client = new google.auth.OAuth2(CLIENT_ID, CLIENT_SECRET, REDIRECT_URI); oauth2Client.setCredentials({ refresh_token: REFRESH_TOKEN }); const drive = google.drive({ version: 'v3', auth: oauth2Client }); - 3
Update File Upload Endpoint
Modify the file upload endpoint to include error handling and ensure that the file is uploaded correctly to Google Drive. Ensure that the request is properly structured.
javascriptapp.post('/test-upload-pdf-file', upload.single('file'), (req, res) => { drive.files.create({ resource: { name: req.file.originalname, mimeType: req.file.mimetype }, media: { mimeType: req.file.mimetype, body: req.file.buffer }, fields: 'id' }, (err, file) => { if (err) { return res.status(500).send(err); } return res.status(200).send(`File uploaded successfully: ${file.data.id}`); }); }); - 4
Test File Upload
Use a tool like Postman or a frontend form to test the file upload functionality. Ensure that a valid PDF file is uploaded and that the response indicates success.
- 5
Handle Errors Gracefully
Implement error handling to manage different types of errors that may occur during the upload process, such as network issues or invalid file types.
javascriptif (err) { console.error('Error uploading file:', err); return res.status(500).send('Error uploading file.'); }
Validation
Confirm the fix worked by successfully uploading a PDF file to Google Drive and receiving a valid file ID in the response. Additionally, check the Google Drive to verify that the file appears as expected.
Sign in to verify this fix
Environment
Submitted by
Alex Chen
2450 rep