كيفية تحميل الملفات إلى Google Drive باستخدام Node.js ، Express و Multer

يصف دليل خطوة بخطوة كيف يمكنك إنشاء نموذج ويب لتحميل الملفات إلى Google Drive باستخدام Node.js و Express و Multer.
يقوم نموذج الويب بترميز الملفات على أنها متعددة/بيانات النموذج ويرسل البيانات في أ POST
طلب إلى تطبيق node.js. Multer هو برامج وسيطة صريحة للتعامل مع بيانات النماذج المتعددة.
1. إنشاء نموذج HTML
يحتوي نموذج HTML على حقل تحميل ملف يسمح بتحميل ملفات متعددة. ويتضمن أيضًا حقول نصية لاسم المدعى عليه والبريد الإلكتروني والبلد.
عند إرسال النموذج ، يستخدم واجهة برمجة تطبيقات الملف المدمجة للمتصفح لإرسال الملفات إلى تطبيق Node.js.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
</head>
<body>
<form>
<input type="file" name="Files" required multiple />
<input type="text" name="Name" placeholder="Name" />
<input type="email" name="Email Address" placeholder="Email" required />
<input type="text" name="Country" placeholder="Country" />
<button type="submit">Submit</button>
</form>
</body>
<script>
const formElem = document.querySelector('form');
formElem.addEventListener('submit', async (e) => {
e.preventDefault();
await fetch('/upload', {
method: 'POST',
body: new FormData(formElem),
});
});
</script>
</html>
2. إنشاء تطبيق node.js
سيتلقى تطبيق Node.js الملفات من النموذج وتحميلها إلى Google Drive. سيقوم المسار المنزلي بتقديم صفحة HTML التي تحتوي على النموذج.
// index.js
const express = require('express');
const uploadRouter = require('./router');
const app = express();
app.get("https://www.labnol.org/", (_, res) => {
res.sendFile(`${__dirname}/index.html`);
});
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(uploadRouter);
app.listen(8080, () => {
console.log('Form running on port 8080');
});
3. جهاز التوجيه تحميل Google Drive
يضيف Multer كائن جسم وكائن ملفات إلى كائن الطلب. يحتوي كائن الجسم على حقول النص للنموذج ، بينما سيحتوي كائن الملفات على الملفات التي تم تحميلها عبر النموذج.
يمكنك مصادقة خدمة Google Drive بحساب خدمة. قم بإنشاء مجلد جديد في Google Drive ، وشارك هذا المجلد بعنوان البريد الإلكتروني لحساب الخدمة واستبدال Drive_Folder_ID بمعرف المجلد.
// router.js
const stream = require('stream');
const express = require('express');
const multer = require('multer');
const { google } = require('googleapis');
const uploadRouter = express.Router();
const upload = multer();
const uploadFile = async (fileObject) => {
const bufferStream = new stream.PassThrough();
bufferStream.end(fileObject.buffer);
const { data } = await google.drive({ version: 'v3' }).files.create({
media: {
mimeType: fileObject.mimeType,
body: bufferStream,
},
requestBody: {
name: fileObject.originalname,
parents: ['DRIVE_FOLDER_ID'],
},
fields: 'id,name',
});
console.log(`Uploaded file ${data.name} ${data.id}`);
};
uploadRouter.post('/upload', upload.any(), async (req, res) => {
try {
const { body, files } = req;
for (let f = 0; f < files.length; f += 1) {
await uploadFile(files[f]);
}
console.log(body);
res.status(200).send('Form Submitted');
} catch (f) {
res.send(f.message);
}
});
module.exports = uploadRouter;