
code.gs code
function doGet(e) {
var html = HtmlService.createTemplateFromFile("index");
html.message='';
var check = html.evaluate();
// 避免無法顯示,使用XFrame allow all
var display = check.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
return display;
}
// 建立上傳的檔案,並上傳到特定夾
function doPost(e) {
// Logger.log(JSON.stringify(e));
var destination_id = '1uWPXP6z8KKgnF_5nZwU_PvgurHPRXTPW'; // ID OF GOOGLE DRIVE DIRECTORY;
var destination = DriveApp.getFolderById(destination_id);
// 建立檔案
var data = Utilities.base64Decode(e.parameter.fileData);
var blob = Utilities.newBlob(data, e.parameter.mimeType, e.parameter.fileName);
// 上傳到特定夾
// destination.createFile(blob);
// 執行新增檔案,並上傳到資料夾,抓file ID
var fileID = destination.createFile(blob).getId();
var fileURL="https://drive.google.com/file/d/"+fileID+"/view"
// 上傳資料
listRecord(e.parameter.description, e.parameter.fileName, fileURL);
// 回應訊息
var htmlOutput = HtmlService.createTemplateFromFile('upload2');
htmlOutput.message = '上傳成功!';
return htmlOutput.evaluate();
}
// HTML與Apps Script 資料上傳的路徑
function getUrl() {
var url = ScriptApp.getService().getUrl();
return url;
}
// 上傳資料的紀錄
function listRecord( description, filename, fileURL)
{
var url = 'https://docs.google.com/spreadsheets/d/1ZDRCHmhR7vvmfK_-YiReEpBc4SlG6sUGB2UnjSLftpc/edit#gid=0'; //URL OF GOOGLE SHEET;
var ss= SpreadsheetApp.openByUrl(url);
var recordsSheet = ss.getSheetByName("Sheet1");
recordsSheet.appendRow([ new Date(), filename, description, fileURL]);
}
index.html
<!DOCTYPE html>
<html>
<head>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-F3w7mX95PdgyTmZZMECAngseQB83DfGTowi0iMjiWaeVhAn4FJkqJByhZMI3AhiU" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-/bQdsTh/da6pkI1MST/rWKFNjaCP5gBSY4sEBT38Q/9RBh9AH40zEOg7Hlq2THRZ" crossorigin="anonymous"></script>
<style>
.container {
width: 80%;
margin-top: 100px;
padding: 30px;
background-color: rgb(110, 151, 255);
border-radius: 20px;
}
.btn {
width: 100%;
}
h1 {
text-align: center;
color: white;
}
label {
color: white;
font-size: 20px;
}
.message {
width: 100%;
padding: 0px;
background-color: rgb(171, 171, 171);
margin-top: 10px;
color: rgb(255, 255, 255);
font-size: 30px;
}
</style>
<base target="_top">
<script>
// 建立上傳的系統
function LoadFile(event) {
var file = event.target.files[0];
var reader = new FileReader();
reader.onload = function(e) {
// console.log(e.target.result);
var fileData = e.target.result.substr(e.target.result.indexOf(",") + 1);
var mimeTypeStart = e.target.result.indexOf("data:") + 5;
var mimeTypeEnd = e.target.result.indexOf(";");
var mimeType = e.target.result.substr(mimeTypeStart, mimeTypeEnd - mimeTypeStart);
var fileName = file.name;
document.getElementById("fileData").value = fileData;
document.getElementById("mimeType").value = mimeType;
document.getElementById("fileName").value = fileName;
};
reader.readAsDataURL(file);
}
</script>
</head>
<body>
<div class="container">
<h1>檔案上傳系統</h1>
<?var url = getUrl();?>
<form method="post" action="<?= url ?>">
<div class="mb-3">
<label for="" class="form-label">選擇檔案file:</label>
<br>
<input type="file" name="file" onchange="LoadFile(event)" />
<input type="hidden" id="fileData" name="fileData" />
<input type="hidden" id="mimeType" name="mimeType" />
<input type="hidden" id="fileName" name="fileName" />
</div>
<div class="col-sm-12">
<div class="row">
<div class="mb-3">
<label for="" class="form-label">描述:</label>
<br>
<textarea class="form-control" name="description" placeholder="描述" rows="5"></textarea>
</div>
</div>
</div>
<button type="submit" class="btn btn-primary">上傳</button>
</form>
<br>
<div class="alert alert-info alert-dismissible fade show" role="alert">
<span>上傳結果:<?= message ?></span>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
</div>
</body>
</html>