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

يصف هذا الدليل خطوة بخطوة كيف يمكنك إنشاء نموذج ويب لتحميل الملفات إلى Google Drive باستخدام Node.js وExpress وMulter.
يقوم نموذج الويب بتشفير الملفات كبيانات متعددة الأجزاء/نموذج ويرسل البيانات في ملف POST
طلب إلى تطبيق Node.js. Multer عبارة عن برنامج وسيط سريع للتعامل مع بيانات النماذج متعددة الأجزاء.
1. إنشاء نموذج HTML
يحتوي نموذج HTML على حقل تحميل ملف يسمح بتحميل ملفات متعددة. ويتضمن أيضًا حقولًا نصية لاسم المستجيب والبريد الإلكتروني والبلد.
عند إرسال النموذج، فإنه يستخدم File API المدمج في المتصفح لإرسال الملفات إلى تطبيق 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;
اكتشاف المزيد من مرابع التكنولوجيا
اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.