const API_KEY = 'AIzaSyAobSJ6RDkfIj6oUNYhvRjygkAODzQocyg'; const DEFAULT_FOLDER_ID = '1Q6LJW_3YarYcUUvUPKqfH7DqPDuJ-8ra'; // รหัสที่อยู่หลัง /folders/ ใน URL const UPLOAD_TO = 'https://web-lsw-dev.nueamek.app/api/upload-file'; const { google } = require('googleapis'); const fs = require('fs'); // 1. ระบุ path ของไฟล์ JSON ที่คุณโหลดมา const KEYFILEPATH = 'lsw-website-484309-6a86a07bc9d5.json'; // 2. กำหนดสิทธิ์ (Scopes) - ในที่นี้คืออ่านไฟล์ใน Drive const SCOPES = ['https://www.googleapis.com/auth/drive.readonly']; // 3. สร้างตัวตน (Auth Client) const auth = new google.auth.GoogleAuth({ keyFile: KEYFILEPATH, scopes: SCOPES, }); async function listFiles(deep = 0,folderId = undefined, folderName = '') { // https://www.googleapis.com/drive/v3/files const url = `https://www.googleapis.com/drive/v3/files?q='${folderId ?? DEFAULT_FOLDER_ID}'+in+parents&key=${API_KEY}`; let files = [] try { const response = await fetch(url); const data = await response.json(); if (data.files && data.files.length > 0) { let forTest = data.files if(deep == 0){ forTest = data.files.slice(0, 1) } data.files.forEach(async file => { // console.log(file); console.log(`ชื่อไฟล์: ${file.name}, ID: ${file.id}`); if(file.mimeType.includes('folder')){ const fileResultList = await listFiles(deep+1, file.id, file.name) const onlyHaveUrlList = fileResultList.filter(fileResult => fileResult.url) files.push(...onlyHaveUrlList) } else if(file.mimeType.includes('image/jpeg')){ const fileResult = await downloadAndUpload(file.id, file.name) if(fileResult.url){ files.push(fileResult) } } }); } else { console.log('ไม่พบไฟล์ในโฟลเดอร์นี้'); } } catch (error) { console.error('เกิดข้อผิดพลาด:', error); } if(deep == 1 && folderName){ const payload = { menuId: 402, templateId: 2, tag: 2, title: folderName, content: '', startAt: "2026-01-14", filedoc: null, imageList: files, } } return files } async function downloadAndUpload(fileId, fileName) { try { // #region วิธีที่ง่ายแต่ access มากไปจะโดน google block เพราะคิดว่าเป็น bot // // 1. ดาวน์โหลดเนื้อหาไฟล์จาก Google Drive (ใช้ alt=media) // const downloadUrl = `https://www.googleapis.com/drive/v3/files/${fileId}?alt=media&key=${API_KEY}`; // const response = await fetch(downloadUrl); // console.log('response', response) // if (!response.ok) { // // อ่านรายละเอียด Error จาก Google // const errorText = await response.text(); // console.error("Error Detail:", errorText); // throw new Error('Download failed'); // } // const fileBlob = await response.blob(); // // 2. สร้าง FormData เพื่อเตรียมส่งไปยัง API ของคุณ // const formData = new FormData(); // // 'file' คือชื่อ field ที่ API ของคุณรอรับ (เปลี่ยนได้ตามความเหมาะสม) // formData.append('file', fileBlob, fileName); // #endregion // #region Service Account const drive = google.drive({ version: 'v3', auth }); // 1. การดึงเนื้อหาไฟล์ (Media) const res = await drive.files.get( { fileId: fileId, alt: 'media' }, // { responseType: 'stream' } { responseType: 'arraybuffer' } ); // คุณสามารถส่ง res.data นี้เข้า FormData เพื่อส่งต่อไปยัง API ของคุณได้เลย // 2. สร้าง FormData เพื่อเตรียมส่งไปยัง API ของคุณ // แปลง ArrayBuffer ที่ได้เป็น Blob const fileBlob = new Blob([res.data]); const formData = new FormData(); formData.append('file', fileBlob, fileName); // #endregion // 3. ส่งข้อมูลไปยัง API ของคุณด้วย POST method const uploadResponse = await fetch(UPLOAD_TO, { method: 'POST', body: formData }); const result = await uploadResponse.json(); // console.log(`อัปโหลดไฟล์ ${fileName} สำเร็จ:`, result); return result } catch (error) { console.error(`เกิดข้อผิดพลาดกับไฟล์ ${fileName}:`, error); return { error: error } } } // // ตัวอย่างการใช้งานร่วมกับรายชื่อไฟล์ที่ได้จากข้อก่อนหน้า // async function processAllFiles(files) { // for (const file of files) { // // กรองเอาเฉพาะไฟล์ .js (ถ้าจำเป็น) // if (file.name.endsWith('.js')) { // await downloadAndUpload(file.id, file.name); // } // } // } // downloadAndUpload('14SGY4irPJ1FwUA5472zlyYtzHvDNaCQ4', 'test') listFiles();