這個文章只是做過測試,想寫一個從line bot可以上傳檔案到google drive 的程式。
程式碼如下:
//設定Line的token這樣就可以圖片傳到 Google Drive 上了,很方便吧?而且,圖片上傳成功與否,也會回覆您一個確認訊息。
const LINE_CHANNEL_ACCESS_TOKEN = "xxxxxxxx";
//設定自已讓儲存使用者上傳圖片的 Google Drive 資料夾 ID
const UPLOAD_IMAGE_FOLDER_ID = "yyyyyyyy";
//處理來自 LINE 的 POST 請求
function doPost(e) {
const json = JSON.parse(e.postData.contents);
const events = json.events;
events.forEach(event => {
const replyToken = event.replyToken;
const message = event.message;
// 處理圖片上傳
if (message.type === "image") {
uploadImageToDrive(message.id, replyToken);
}
return ContentService.createTextOutput(JSON.stringify({ "status": "ok" })).setMimeType(ContentService.MimeType.JSON);
}
function uploadImageToDrive(messageId, replyToken) {
try {
Logger.log("--- 嘗試從 LINE 取得圖片內容 ---");
const blob = UrlFetchApp.fetch(`https://api-data.line.me/v2/bot/message/${messageId}/content`, {
headers: { "Authorization": `Bearer ${LINE_CHANNEL_ACCESS_TOKEN}` }
}).getBlob();
const folder = DriveApp.getFolderById(UPLOAD_IMAGE_FOLDER_ID);
const file = folder.createFile(blob.setName(`line_image_${new Date().getTime()}.jpg`));
reply(replyToken, { type: "text", text: `圖片已成功上傳至 Google Drive!\n連結:${file.getUrl()}` });
} catch (error) {
Logger.log("上傳圖片時發生錯誤:" + error.message);
reply(replyToken, { type: "text", text: "上傳圖片失敗,請再試一次。"+error.message});
}
}
function reply(replyToken, messages) {
UrlFetchApp.fetch("https://api.line.me/v2/bot/message/reply", {
"headers": {
"Content-Type": "application/json; charset=UTF-8",
"Authorization": "Bearer " + LINE_CHANNEL_ACCESS_TOKEN
},
"method": "post",
"payload": JSON.stringify({
"replyToken": replyToken,
"messages": Array.isArray(messages) ? messages : [messages]
})
});
}
參考line 官方帳號 : 這裏


