我已经用 HTML 构建了一个表单,并且它基本上已正确提交到 Google Apps 脚本中。它将信息输入到 Google 表格中,根据提交表单的人员创建自定义文件夹,根据该人员的提交创建 PDF,然后将其上传到相应人员的文件夹中。
我也在尝试获取上传图片的表格。我不想重写我的整个表单/代码只是为了添加此上传图片功能,并且根据我所看到的,它不应该太复杂。该 blob 似乎已添加到表单提交中,并且我尝试了六种不同的方法来在 Apps 脚本中检索该 blob,但似乎没有任何内容真正将文件下载到 Google Drive 中。
我应该注意,我没有在 Index.html 文件中的 Apps 脚本中构建 HTML。我宁愿将我的 html 单独嵌入到我的网页中,然后使用 fetch API 调用 Apps 脚本代码。虽然,我的代码几乎是 google 结果、ChatGPT 和 Google Gemini 的组合......所以我愿意接受建议/建议
我的 HTML 表单非常简单,因此我将在下面附上相关的 JS 和 Apps 脚本代码:
<script>
window.addEventListener("load", function() {
const form = document.getElemntById('TestForm');
form.addEventListener("submit", function(e) {
e.preventDefault();
const data = newFormData(form);
const action = e.target.action;
fetch(action, {
method: 'POST',
body: data
})
.then(response => {
if (!response.ok) {
throw new Error('HTTP error! Status: ${response.status}');
}
return response.text();
.catch(error => {
console.error('Error during form submission:', error);
});
})
})
</script>
function doPost(e) {
try {
const pictureFolderId = "PICTURE-FOLDER-ID";
const pictureFolder = DriveApp.getFolderById(pictureFolderId)
uploadImage(e, pictureFolder)
} catch (error) {
//Logging errors and such
}
}
function uploadImage(e, pictureFolder) {
const file = e.parameters.file[0];
const imageBlob = file.getAs(MimeType.PNG)
pictureFolder.createFile(imageBlob);
}
最后一个函数 uploadImage() 是我认为问题所围绕的。我尝试了不同的方法来检索斑点,但我似乎无法弄清楚。我也尝试过使用
Utilities.newblob(file.getByes())
,但没有成功。我也尝试过使用e.getBlob()
,尽管这似乎不起作用。看起来应该很简单,但显然并非如此。至少对于我来说。有人可以帮助我,和/或解释为什么我正在尝试的方法不起作用吗?
以下代码对我有用:
function uploadFileToGoogleDrive(e, dropbox) {
var folder, folders = DriveApp.getFoldersByName(dropbox);
if (folders.hasNext()) {
folder = folders.next();
} else {
folder = DriveApp.createFolder(dropbox);
}
var data = e.parameter.fileContent;
var filename = e.parameter.filename;
var contentType = data.substring(5, data.indexOf(';')),
bytes = Utilities.base64Decode(data.substr(data.indexOf('base64,') + 7)),
blob = Utilities.newBlob(bytes, contentType, filename);
var file = folder.createFile(blob);
return file.getId();
}