【发布时间】:2015-10-18 09:52:11
【问题描述】:
我是一名编程新手,当我遇到问题并需要独特的解决方案时,我会求助于不同的代码和应用程序。我是一名小学计算机教师,正在寻找一种方法让学生从家里或手机上传文件,然后上传到我的 Google Drive 帐户。我使用 Google Apps 脚本在 labnol.org1 上找到了解决方案。
我按照所有说明进行操作,一切正常。文件已成功上传到我的 Google Drive 帐户。我最终希望能够根据表单中用户输入的信息重命名文件。我在这个网站上找到了解决方案。我对 html 和 gs 文件做了一些更改...
html:
<form id="myForm">
<input type="text" name="myFirstName" placeholder="First Name">
<input type="text" name="myLastName" placeholder="Last Name">
<input type="file" name="myFile">
<input type="submit" value="Upload File"
onclick="this.value='Uploading...';
google.script.run.withSuccessHandler(fileUploaded)
.uploadFiles(this.parentNode);
return false;"
>
</form>
<script>
function fileUploaded(status) {
document.getElementById('myForm').style.display = 'none';
document.getElementById('output').innerHTML = status;
}
</script>
Google Apps 脚本
function doGet(e) {
return HtmlService.createHtmlOutputFromFile('form.html');
}
function uploadFiles(form) {
try {
var dropbox = "Sample Form 3rd Grade";
var folder, folders = DriveApp.getFoldersByName(dropbox);
if (folders.hasNext()) {
folder = folders.next();
} else {
folder = DriveApp.createFolder(dropbox);
}
var blob = form.myFile;
var fileBlob = form.myFile;
var fname = fileBlob.getName();
var newName = form.myLastName+form.myFirstName; // simple example
// extract extension using RegEx
// from http://stackoverflow.com/a/680982/1677912
var extensionfinder = /(?:\.([^.]+))?$/;
var ext = extensionfinder(fname)[1];
fileBlob.setName(newName+'.'+ext);
var file = folder.createFile(blob);
file.setDescription("Uploaded by " + form.myFirstName+form.myLastName);
return "<p> Thanks for uploading a photo for the technology project, " + form.myFirstName + "!";
} catch (error) {
return error.toString();
}
}
再次,一切正常。但是,我接下来要做的是让学生从下拉列表中选择老师的姓名,然后根据他们的回答,将学生的文件上传到不同的文件夹中。例如,如果 Student1 选择 Teacher1,我希望将他的文件上传到我的 Drive 帐户中 Teacher1 指定的文件夹中。这纯粹是为了让事情井井有条并节省我的时间。
新的html如下:
<form id="myForm">
<font face="sans-serif">Select your teacher:</font>
<select id="teachers" name="teachers">
<option value="teacher1">Teacher1</option>
<option value="teacher2">Teacher2</option>
<option value="teacher3">Teacher3</option>
<option value="teacher4">Teacher4</option>
</select>
<input type="text" name="myFirstName" placeholder="First Name">
<input type="text" name="myLastName" placeholder="Last Name">
<input type="file" name="myFile">
<input type="submit" value="Upload File"
onclick="this.value='Uploading...';
google.script.run.withSuccessHandler(fileUploaded)
.uploadFiles(this.parentNode);
return false;"
>
</form>
<script>
function fileUploaded(status) {
document.getElementById('myForm').style.display = 'none';
document.getElementById('output').innerHTML = status;
}
</script>
我几乎没有使用 Java 和 Google Apps Script 的经验,所以我尝试了很多失败的方法。这就像在黑暗中工作。
我最大的障碍是从"teachers" 元素访问用户输入的选项值。我发现的有关此问题的大多数答案都包括创建条件语句,这是我尝试使用 If (document.GetElementById('teachers').value == "teacher1") {function... 的第一件事,依此类推。但是,我不断收到“文档未定义”错误,我了解到这是因为我在 .gs 文件中编写该脚本,而不是在 html 文件中。然而,我注意到用户输入的文本可以通过form.myFirstName+form.myLastName 访问。所以我尝试用form.teachers.value 代替document.GetElementById 方法。那也没用。
我为此花费了好几个小时(我承认,在暑假期间学习新事物很有趣),但我最终决定寻求一些帮助。我已经搜索了这个网站和其他网站来学习如何做到这一点。我怀疑这是一个很难解决的简单问题,而且我太缺乏经验甚至没有注意到。
我还考虑过为每个单独的课程创建不同的应用程序脚本,创建“教师姓名”文本输入,以及一些其他的东西来保持这些文件的井井有条,如果我无法弄清楚的话。
提前感谢您的帮助。
【问题讨论】:
标签: javascript file-upload google-apps-script directory