我有这个脚本工作,但几周前它突然停止了 - 我以为我犯了一些编程错误,但我已经无法调试它好几个星期了。
我想要谷歌网站上的一个脚本,它允许某人上传文件(以及其他一些信息,比如它的名称),并让脚本将其附加到新的文件柜页面,然后使用新页面的信息更新列表页面。
我使用了旧论坛帖子中的部分代码,在需要的地方进行了更新。如果有人知道更简单的方法,我不反对重写。
谢谢!
编辑:问题似乎出在 doPost(e) 函数中 - 点击提交后,没有任何反应,小工具变为空白,我收到错误消息:“发生意外错误。”
function doGet(e){
return getUi(e);
}
function getUi(e) {
//create user interface for uploading information
var app = UiApp.createApplication().setTitle('File Upload');
var form = app.createFormPanel().setId('form').setEncoding('multipart/form-data');
//create grid to store information
var formContent = app.createGrid().resize(6,2);
formContent.setText(0,0,'File Name: ');
var fileName = app.createTextBox().setName('fileName').setId('fileName');
formContent.setWidget(0,1,fileName);
var fileUpload = app.createFileUpload().setName('fileUpload').setId('fileUpload');
formContent.setWidget(1,1,fileUpload);
formContent.setWidget(2,0,app.createLabel('Short Description: '));
var fileDescription = app.createTextBox().setName('fileDescription').setId('fileDescription');
formContent.setWidget(2,1,fileDescription);
formContent.setText(3,0,'Level: ');
var level = app.createListBox().setName('level').setId('level').addItem('Introductory').addItem('Intermediate').addItem('Advanced');
formContent.setWidget(3,1,level);
formContent.setText(4,0,'Subject: ');
var subject = app.createListBox().setName('subject').setId('subject').addItem('Fundamentals').addItem('Observing').addItem('Solar System').addItem('Stars').addItem('Stellar Evolution').addItem('Milky Way').addItem('Galaxies').addItem('Cosmology')
formContent.setWidget(4,1,subject);
var submitButton = app.createSubmitButton("Submit").setId("submitButton");
formContent.setWidget(5,1,submitButton);
//var handler = app.createServerHandler("pauseUi");
//submitButton.addClickHandler(handler);
form.add(formContent);
app.add(form);
var resultTextArea = app.createTextArea().setName("resultArea").setId("resultArea");
resultTextArea.setVisibleLines(5);
resultTextArea.setSize("80%","80%");
app.add(resultTextArea);
var ogga = 'good god';
Logger.log(ogga);
return app;
}
function pauseUi(e){
var app = UiApp.getActiveApplication();
app.getElementById("file").setEnabled(false);
app.getElementById("fileName").setEnabled(false);
app.getElementById("fileDescription").setEnabled(false);
app.getElementById("submitButton").setEnabled(false);
app.getElementById("level").setEnabled(false);
app.getElementById("subject").setEnabled(false);
app.getElementById("resultArea").setEnabled(false);
app.getElementById("resultArea").setText('Please wait...');
return app;
}
function resetUi(app){
app.getElementById("file").setEnabled(true);
app.getElementById("fileName").setEnabled(true);
app.getElementById("fileDescription").setEnabled(true);
app.getElementById("submitButton").setEnabled(true);
app.getElementById("level").setEnabled(true);
app.getElementById("subject").setEnabled(true);
app.getElementById("resultArea").setEnabled(true);
}
function doPost(e){
var app = UiApp.getActiveApplication();
Logger.log(e.parameter);
//create new page for uploaded file
var msg = createNewPage(e.parameter.fileName,e.parameter.fileUpload,e.parameter.fileDescription,e.parameter.level,e.parameter.subject);
//reset upload page
resetUi(app);
//notify user of success or failure
app.getElementById("resultArea").setText(msg.join('\n'));
return app;
}
function createNewPage(fileName,uploadedFile,fileDescription,level,subject){
//site information
var mysite = SitesApp.getSite("uw.edu","introductory-astronomy-clearinghouse");
var labsPage = mysite.getChildByName("labs-exercises");
Logger.log('url for lab page is: '+labsPage.getUrl());
var msg = [];
//create new page
var page = findPage(fileName);
if (page == null){
var page = labsPage.createFileCabinetPage(fileName, normalizeName(fileName), '');
}
try{
//add file to file cabinet
var attachment = page.addHostedAttachment(uploadedFile);
//see if already listed on list
var listItem = getFileListItem(fileName);
if (listItem == null) {
var fileUrl = page.getUrl();
var newValues = [repairUrlValue(fileUrl, fileName), fileDescription, level, subject];
labsPage.addListItem(newValues);
}
msg.push('Refresh page to see your item added or edit your file at: '+fileUrl);
} catch(e){
msg.push('Failed to upload the '+ fileName +' attachment, possibly due to size constraints or time out issues.');
}
return msg;
}
function getFileListItem(fileName){
var mysite = SitesApp.getSite("uw.edu","introductory-astronomy-clearinghouse");
var labPage = mysite.getChildByName("labs-exercises");
var i = getListItemIndex(labPage,fileName,0);
var items = labPage.getListItems();
Logger.log('labPage list item'+items[i].getValueByIndex(0));
return (i>-1)? labPage.getListItems()[i]:null;
}
//get the index of your item
function getListItemIndex(listPage,propOneValue,propOneIndex){
//for column propOneIndex, returns index (row) that equals propOneValue, or -1.
var listItems = listPage.getListItems();
Logger.log('listItems '+listItems.length);
var r = -1;
for (var i = 0;i<listItems.length && r<0;i++){
if ((listItems[i].getValueByIndex(propOneIndex) == propOneValue)){r = i;}
}
return r;
}
//repairs URL
function repairUrlValue(url,text){
Logger.log('buildAnchor for'+text+'->'+url);
var a = '<a href="'+url+'">"'+text+'</a>';
Logger.log('...built '+a);
return a;
}
//find name of page with normalized name
function findPage(name){
var mysite = SitesApp.getSite("uw.edu","introductory-astronomy-clearinghouse");
var parentPage = mysite.getChildByName("labs-exercises");
var norm = normalizeName(name);
var page = parentPage.getChildByName(norm);
Logger.log('findPage '+page.getUrl());
return page;
}
//get size of attached file in KB
function getBlobSize(blob) {
return Math.round(blob.getBytes().length/1024)+" KB";
}
//put the name into reasonable form
function normalizeName(header){
var key = "";
for (var i = 0; i < header.length; ++i){
var letter = header[i];
if (letter == " " && key.length > 0){
key +='-';
continue;
}
if (!isAlnum(letter)){
continue;
}
if (key.length == 0 && isDigit(letter)){
continue; //first character must be a letter
}
key += letter.toLowerCase();
}
Logger.log("normalizeName from '"+header+"' to '"+key+"'");
return key;
}
/*
i s A l n u m
Returns true if the character char is alphabetical, false otherwise
*/
function isAlnum(char){
return char >= 'A' && char <= 'Z' ||
char >='a' && char <= 'z' ||
isDigit(char);
}
/* i s D i g i t
Returns true if the character is a digit, false otherwise.
*/
function isDigit(char){
return char >='0' && char <= '9';
}