javascript - Google Scripts/HTML/JavaScript Upload File to Folder 错误参数不能为空:blob
问题描述
我正在创建一个在线 HTML 表单,让人们可以选择上传文件。我正在使用谷歌表格来收集数据,所以我正在使用他们的谷歌脚本功能。当我运行我的代码时,一切正常,这意味着我将数据插入到单元格中,但不是文件上传。这是我用于文件上传的 Google Scripts 代码:
function doGet(request) {
return HtmlService.createTemplateFromFile('Index')
.evaluate();
}
/* @Include JavaScript and CSS Files */
function include(filename) {
return HtmlService.createHtmlOutputFromFile(filename)
.getContent();
}
function uploadFiles(data){
var folder = DriveApp.getFolderById('1pp1ELzGa2fZqU4IHAasZMHsmYx19pnYv');
var createFile = folder.createFile(data.image);
return createFile.getUrl();
}
据我所知,问题出在data.image
. 这是我试图检索我的图像的地方,以便我可以将其上传到文件夹中。一定uploadFiles(data)
是没有正确引入data
。
这是 HTML 和 JavaScript:
<form id="myForm" onsubmit="handleFormSubmit(this)">
<h1 class="h4 mb-4 text-center" style="text-align:center"> <center>File Upload Testing</center></h1>
<table>
<tr>
<td colspan="11"><input type="file" id="image"></td>
</tr>
<input type="hidden" id="fileURL" name="fileURL">
</table>
<button type="submit" class="button button1" id="submitBtn">Submit</button>
</form>
<script>
document.getElementById('submitBtn').addEventListener('click',
function(e){
google.script.run.withSuccessHandler(onSuccess).uploadFiles(this.parentNode);;}
)
function onSuccess(data){
document.getElementById("fileURL").value = data;
}
</script>
我有一种感觉,该e
参数没有检索上面的数据,但是我并不真正了解它是如何工作的。也可能this.parentNode
是没有抓住fike。
我正在使用 onSuccess 函数来检索链接,因此我可以将其放入我的谷歌表格以便快速访问。
这是 google 表格的链接。要访问 google 脚本,请转到“工具 -> 脚本编辑器”。 https://docs.google.com/spreadsheets/d/16w8uB4OZHCeD7cvlrUv5GHP72CWxQhO1AAkF9MMSpoE/edit?usp=sharing
这是我尝试使用的另一种技术:Javascript:
function uploadthis(fileForm){
const file = fileForm.image.files[0];
const fr = new FileReader();
fr.onload = function(e) {
const obj = {
// filename: file.name
mimeType: file.type,
bytes: [...new Int8Array(e.target.result)]
};
google.script.run.withSuccessHandler((e) => console.log(e)).uploadFiles(obj);
};
fr.readAsArrayBuffer(file);
}
谷歌脚本:
function uploadFiles(data){
var file = Utilities.newBlob(data.bytes, data.mimeType); // Modified
var folder = DriveApp.getFolderById('1pp1ELzGa2fZqU4IHAasZMHsmYx19pnYv');
var createFile = folder.createFile(file);
return createFile.getId(); // Added
}
谢谢!
解决方案
推荐阅读
- python - Python中timedate对象之间的秒差
- python-3.x - IndexError:数组的索引过多:数组是一维的,但有 2 个被索引
- python - 有没有办法在 Python 中正确打印带有土耳其字符的文本数据?
- networking - linux在发送数据包时如何选择tx队列以及如何更改策略?
- c# - 如何在 C# 中解析十进制
- c++ - 如何正确销毁线程并销毁对象?
- android - 如何查看APK文件的签名?
- database - Graphql 字段始终为空
- flutter - 带有可选列表的 Flutter 模型现在在移动到 null 感知后会给出错误
- javascript - 访问 vaule 时出错,可在全局游戏范围内使用。画布和 JS