Formular und Datei-upload mit htmlService und app script nicht funktioniert
Ich versuche zum hochladen einer Datei zu einer bestimmten google-drive-Ordner zusammen mit dem Formular Daten in eine Tabelle. Die Tabellenkalkulation Teil dieser code funktioniert, aber die Datei-upload-Funktion nicht. Jede Hilfe auf dies zu beheben würde sehr geschätzt.
Code.gs
var submissionSSKey = 'SS ID';
function doGet(e) {
var template = HtmlService.createTemplateFromFile('Form.html');
template.action = ScriptApp.getService().getUrl();
return template.evaluate();
}
function doPost(e) {
var template = HtmlService.createTemplateFromFile('Thanks.html');
var LoanType = template.name = e.parameter.name;
var borrower = template.department = e.parameter.department;
var amount = template.message = e.parameter.message;
var emailed = template.email = e.parameter.email;
var comp = 'N/A'
var sheet = SpreadsheetApp.openById(submissionSSKey).getSheets()[0];
var lastRow = sheet.getLastRow();
var targetRange = sheet.getRange(lastRow+1, 1, 1, 5).setValues([[comp,LoanType,borrower,amount,emailed]]);
var fileBlob = e.paramater.thefile
var doc = DriveApp.getFolderById('folder ID');
doc.createFile(fileBlob)//.rename('New Name');
return template.evaluate();
}
Form.html
<html>
<head>
<title></title>
</head>
<body>
<form action="<?= action ?>" enctype="multipart/form-data" method="post">
<table border="0" cellpadding="1" cellspacing="0" style="width: 500px;">
<tbody>
<tr>
<td>
Name:</td>
<td>
<input name="name" type="text" /></td>
</tr>
<tr>
<td>
Department:</td>
<td>
<select name="department">
<option>Select Option</option>
<option>Cashier</option>
<option>Greeter</option>
<option>Runner</option>
<option>Line Control</option>
<option>IDB</option>
<option>Unknown</option>
</select></td>
</tr>
<tr>
<td>
Email:</td>
<td>
<input name="email" type="text" /></td>
</tr>
<tr>
<td>
Message:</td>
<td>
<textarea name="message" style="margin: 2px; height: 148px; width: 354px;"></textarea></td>
</tr>
<tr>
<td>
<p>
School Schedule (Image Files Only):</p>
</td>
<td>
<p>
<input type="file" id="thefile" name="thefile">
</p></td>
</tr>
<tr>
<td>
<input type="submit" value="Submit" /></td>
<td>
You will receive an email confirmation upon submission</td>
</tr>
</tbody>
</table>
</form></body>
</html>
Thanks.html
<html>
<body>
<h1>Thanks</h1>
<p>Thank you for your submission.</p>
Name: <?= name ?><br/>
Department: <?= department ?><br/>
Message: <?= message ?><br/>
Email: <?= email ?><br/>
</body>
</html>
InformationsquelleAutor ryano | 2013-12-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Edit: Beispiel Arbeiten
Den HtmlService unterstützt nicht die
post
- Methode für HTML-Formulare. Die input-Elemente, erhoben durch eine form kommuniziert werden können, um eine server-side-Funktion mit einer handler-Funktion statt. Für mehr details, siehe HTML-Service: Kommunikation mit Server-Funktionen.Hier ist ein Beispiel, basierend auf dem code, die du gepostet hast in deine Frage.
Form.html
Thanks.html
Code.gs
Ursprüngliche Antwort, die konzentrierte sich auf die " basic-debugging:
Woher kommt dieser code ursprünglich her? Es wurden mehrere Fragen dazu, und es könnte hilfreich sein, um zu sehen, das original-tutorial oder ein Beispiel aus dem es entnommen wurde.
Wenn Sie diesen code ausführen, wie eine veröffentlichte web-app, und senden Sie eine Datei, die Fehlermeldung, die Sie erhalten, ist
TypeError: Cannot read property "thefile" from undefined.
Ohne zu Graben, sagt Sie, dass es eineundefined
Objekt in Ihrem code verwendet. Welches Objekt ist das? Weiß es noch nicht, aber ein Anhaltspunkt ist, dass der code ist auf der Suche nach einer Eigenschaft mit dem Namen"thefile"
.Wenn Sie das Skript im editor geöffnet, und startete die webapp von dort aus (durch Klick auf
Test web app for your latest code
in der Veröffentlichen /Bereitstellen als Web-App-dialog), dann können Sie auch prüfen, die Ausführung Abschrift für mehr details. (unter Ansicht-Menü) finden Sie, dass es enthält so etwas wie dieses:Sehen wir, dass die gleichen Fehler, aber jetzt wissen wir die Nummer der Zeile. Diese Zeile enthält einen Tippfehler:
Übrigens, der code kam von einer Frage von einem user gefragt auf dieser Seite. stackoverflow.com/questions/15261247/...
Ah, das klärt die Dinge ein wenig -, die Frage war mit UiService, während Sie mit HtmlService für Ihre form. Jedoch, Sie habe immer die gleichen server-Seite posten Handhabung. Nach Antwort von einem Mitglied des GAS-team, "HtmlService nicht sogar doPost - es nutzt das von google.script.führen Sie die syntax, ausschließlich." Das follow-up zu beantworten ist ein Beispiel für die Verwendung HtmlService und server-side-Handler zu erreichen, entspricht der UiService POST für einen Datei-upload.
Ich habe aktualisiert die Antwort mit einem Beispiel arbeiten mit htmlservice.
Vielen Dank so viel für diese! Die
toggle_visibility
Skript ist ein schönes kleines tool. Ich ging weiter und fügte hinzustyle="display: block;
zu denid="formDiv"
Abschnitt, so dass es verschwinden würde auf "Absenden" klicken. Es ist genau das, was ich brauchte. Ich habe auch<img src="https://dl.dropboxusercontent.com/u/211279/loading3T.gif" alt="Loading">Uploading. Please wait...
zu denid="inProgress"
AbschnittInformationsquelleAutor Mogsdad