如何在特定文件夹中保存多个文件上传?
How to save multiple file upload in a specific folder?
我在 Google 表单上创建了一个自定义表单,其中包含上传文件问题(允许多个文件)。我在提交表单时尝试 运行 一个脚本,该脚本在 Drive 中的特定目标中创建一个文件夹,并保存上传到该文件夹中的文件。但我不知道如何检索上传文件的 ID 并将它们移动到新文件夹中。
谢谢
我设法创建了新文件夹,但我无法select 上传的文件并将它们保存(或移动)到目标文件夹。我不会发布创建文件夹代码。
function onFormSubmit(e) {
var form = FormApp.getActiveForm();
var formResponses = form.getResponses();
var formResponse = formResponses[formResponses.length-1];
var itemResponses = formResponse.getItemResponses();
var itemResponse = itemResponses[1];
var uploadedfile = itemResponse.getResponse();
//now??
}
我想获取文件的 ID,但使用 .getItem().getID() 方法我得到类似 1.148501776E9 的内容
还有我怎样才能遍历上传的文件?
- 当文件通过Google形式上传时,您想将上传的文件移动到特定文件夹。
- 您已经为
onFormSubmit()
安装了 OnSubmit 事件触发器。
- 您已经有了目标文件夹的文件夹 ID。
如果我的理解是正确的,这个修改怎么样?请将此视为几个答案之一。
修改点:
.getItem().getId()
is the item's unique identifier.
getResponse()
of itemResponses
有上传文件的文件ID。你可以用这个。
修改后的脚本:
在使用此脚本之前,请将目标文件夹 ID 设置为 var folderId = "###"
。
修改脚本时,请删除OnSubmit事件触发器一次,重新安装触发器。那时,如果显示授权屏幕。请授权。这样,脚本就可以工作了。 请注意这一点。
function onFormSubmit(e) {
var form = FormApp.getActiveForm();
var formResponses = form.getResponses();
var formResponse = formResponses[formResponses.length-1];
var itemResponses = formResponse.getItemResponses();
// I modified below script.
Utilities.sleep(3000);
var folderId = "###"; // Please set folder ID of the destination folder.
var destfolder = DriveApp.getFolderById(folderId);
for (var i = 0; i < itemResponses.length; i++) {
if (itemResponses[i].getItem().getType() == "FILE_UPLOAD") {
var ids = itemResponses[i].getResponse();
for (var j = 0; j < ids.length; j++) {
var file = DriveApp.getFileById(ids[j]);
destfolder.addFile(file);
file.getParents().next().removeFile(file);
}
}
}
}
注:
- 在我的测试用例中,当没有使用
Utilities.sleep(3000)
时,出现了在文件上传未完成之前尝试移动文件而发生错误的情况。所以我把它。如果在您的环境中,没有它也不会出现错误,请将其删除。
参考文献:
如果我误解了你的问题,这不是你想要的结果,我深表歉意。
Google将上传的文件按以下方式存储:
- 它创建一个文件夹
"Placeholder_for_Name_of_the_Form"(File responses)
和子文件夹:"Placeholder_for_Name_of_Question"(File responses)
并将所有上传的文件存储在那里。
- 如果您将表格 link 转换为电子表格,电子表格将包含 URL 上传文件(其中包含 ID)作为问题的答案。您还可以使用 Apps 脚本以编程方式访问这些数据(相关方法:
openSpreadsheetbyId()
;getRage()
;getValues()
,...)。
如果您想在与 onFormSubmit()
不同的时间点检索数据,此信息可能对您有用。
我在 Google 表单上创建了一个自定义表单,其中包含上传文件问题(允许多个文件)。我在提交表单时尝试 运行 一个脚本,该脚本在 Drive 中的特定目标中创建一个文件夹,并保存上传到该文件夹中的文件。但我不知道如何检索上传文件的 ID 并将它们移动到新文件夹中。 谢谢
我设法创建了新文件夹,但我无法select 上传的文件并将它们保存(或移动)到目标文件夹。我不会发布创建文件夹代码。
function onFormSubmit(e) {
var form = FormApp.getActiveForm();
var formResponses = form.getResponses();
var formResponse = formResponses[formResponses.length-1];
var itemResponses = formResponse.getItemResponses();
var itemResponse = itemResponses[1];
var uploadedfile = itemResponse.getResponse();
//now??
}
我想获取文件的 ID,但使用 .getItem().getID() 方法我得到类似 1.148501776E9 的内容 还有我怎样才能遍历上传的文件?
- 当文件通过Google形式上传时,您想将上传的文件移动到特定文件夹。
- 您已经为
onFormSubmit()
安装了 OnSubmit 事件触发器。 - 您已经有了目标文件夹的文件夹 ID。
如果我的理解是正确的,这个修改怎么样?请将此视为几个答案之一。
修改点:
.getItem().getId()
is the item's unique identifier.getResponse()
ofitemResponses
有上传文件的文件ID。你可以用这个。
修改后的脚本:
在使用此脚本之前,请将目标文件夹 ID 设置为 var folderId = "###"
。
修改脚本时,请删除OnSubmit事件触发器一次,重新安装触发器。那时,如果显示授权屏幕。请授权。这样,脚本就可以工作了。 请注意这一点。
function onFormSubmit(e) {
var form = FormApp.getActiveForm();
var formResponses = form.getResponses();
var formResponse = formResponses[formResponses.length-1];
var itemResponses = formResponse.getItemResponses();
// I modified below script.
Utilities.sleep(3000);
var folderId = "###"; // Please set folder ID of the destination folder.
var destfolder = DriveApp.getFolderById(folderId);
for (var i = 0; i < itemResponses.length; i++) {
if (itemResponses[i].getItem().getType() == "FILE_UPLOAD") {
var ids = itemResponses[i].getResponse();
for (var j = 0; j < ids.length; j++) {
var file = DriveApp.getFileById(ids[j]);
destfolder.addFile(file);
file.getParents().next().removeFile(file);
}
}
}
}
注:
- 在我的测试用例中,当没有使用
Utilities.sleep(3000)
时,出现了在文件上传未完成之前尝试移动文件而发生错误的情况。所以我把它。如果在您的环境中,没有它也不会出现错误,请将其删除。
参考文献:
如果我误解了你的问题,这不是你想要的结果,我深表歉意。
Google将上传的文件按以下方式存储:
- 它创建一个文件夹
"Placeholder_for_Name_of_the_Form"(File responses)
和子文件夹:"Placeholder_for_Name_of_Question"(File responses)
并将所有上传的文件存储在那里。 - 如果您将表格 link 转换为电子表格,电子表格将包含 URL 上传文件(其中包含 ID)作为问题的答案。您还可以使用 Apps 脚本以编程方式访问这些数据(相关方法:
openSpreadsheetbyId()
;getRage()
;getValues()
,...)。
如果您想在与 onFormSubmit()
不同的时间点检索数据,此信息可能对您有用。