Apps Script上傳檔案到Google Drive
緣起
由於之後專案經理想要在我們之前AppScript上開發的網站上,加入上傳圖檔的機制,先進行相關方法的Survey。
參考資料
搜索一陣之後,看到這篇BLOG寫的滿完整的,提供兩種方法的實作程式碼
可行的2種方法
經我的實測,會僅有兩種實作方法,是因為AppScript的doPost方法,是會經過Google伺服器的轉譯,上傳檔案的資料根本無法抵達doPost方法,故僅能有上篇BLOG所寫的兩種方法可用。
- 使用google app script所提供的方法,缺點是沒辦法關注檔案上傳的進度。
- 使用變形版本的傳統Form:是將檔案手動轉成BASE64文字格式,再將轉換後資料附加在傳統的Form上送出資料,繞過AppScript的限制。
傳統的Form的方法是"application/x-www-form-urlencoded",傳統Form會因為Browser端及Server端的限制有不同的檔案大小限制,從1MB到2GB都有。
實測傳統Form上傳:失敗
(不使用變形版本傳統Form)
只放測試文字和選取上傳檔案的form,在AppScript的doPost部份,無法得到檔案內容,只有檔案名稱。
實測現代方法:失敗
至於現代網頁的上傳檔案的新方法還有“multipart/form-data”,在JQuery中可以用FormData實作,但是無法AppScript上無法使用,"multipart/form-data"的方式傳輸到AppScript只會在Browser上得到錯誤回應。
from origin 'null' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
整理測試方法如下:
1. 在Form標籤設定method="post" enctype="multipart/form-data"
2. JQuery初始化加入
$(document).ready(()=>{$("Form").submit(onHandelUpload);});
3. 加入onHandelUpload函數
function onHandelUpload(e){
e.preventDefault();
var data = new FormData($(this)[0]);
$.ajax({
type: 'POST',
url: '{你的AppScript正式版URL,不能是Latest版本}',
data: data,
cache: false,
processData: false,
contentType: false,
dataType: 'text',
success: function(results) {
console.log(JSON.stringify(results));
},
error: function(results) {
console.log(JSON.stringify(results));
},
});
}
留言