143 lines
5.4 KiB
JavaScript
143 lines
5.4 KiB
JavaScript
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(); |