Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
在解決問題之道上不斷前行
之前建立了一組 LIFF + GAS API 的問卷流程,後續出現了需要上傳圖片的需求,結果發現一樣可以透過 GAS 去對 Google Drive 存取,就稍微改造了一下XD
這篇僅記錄 GAS 端接收圖片資料後的處理。
需要先拆解接收的 base64 字串,原本長得像「data:image/png;base64, xxxxxxxxx」要把 data:image/png;base64 拆掉,剩下後面的 base64 字串。
拆解完後再重新建立 blob 物件(Binary Large Object)
const base64String = imageBlobstring.split(';base64,').pop();
const imageBlob = Utilities.newBlob(Utilities.base64Decode(base64String), 'image/png','test.png');//需要指定檔名
const image = imageBlob;
記得要先開放 Google Drive 的存取權限,開放給所有人編輯
file = Drive.Files.create(file, image, {'fields': 'id,size'});
如果不調整資料夾,則會在 Google Drive 的根目錄,當然不太可能這樣做,因此要調整資料夾位置
// 取得資料夾
//https://drive.google.com/drive/u/0/folders/<FolderId> 記得要開權限
var folder = DriveApp.getFolderById('<FolderId>');
// 在資料夾中創建文件
var createdFile = folder.createFile(image);
function uploadFile(imageBlobstring) {
try {
// Makes a request to fetch a URL.
//const image = UrlFetchApp.fetch('http://goo.gl/nd7zjB').getBlob();
const base64String = imageBlobstring.split(';base64,').pop();
const imageBlob = Utilities.newBlob(Utilities.base64Decode(base64String), 'image/png','test.png');//需要指定檔名
Logger.log(imageBlob);
const image = imageBlob;
let file = {
name: 'google_logo.png',
mimeType: 'image/png'
};
// // Create a file in the user's Drive.
// file = Drive.Files.create(file, image, {'fields': 'id,size'});
// 獲取資料夾
var folder = DriveApp.getFolderById('1JOGpsxxAD8ijbT3hIjFATE2daRvaKVN4');
// 在資料夾中創建文件
var createdFile = folder.createFile(image);
Logger.log('ID: %s, File size (bytes): %s', createdFile.getId(), createdFile.getSize());
} catch (err) {
// TODO (developer) - Handle exception
Logger.log('Failed to upload file with error %s', err.message);
}
}