Это вторая часть проблемы, которая была решена здесь: Вставьте ссылку на изображение с Google Drive в Google Sheets после загрузки изображения через веб-приложение
Я занимаюсь разработкой веб-приложения, в котором пользователь может загрузить изображение, нажав кнопку. Это действие загрузит изображения в определенный каталог на моем диске Google с уникальной папкой и именем.
Теперь я пытаюсь скопировать и вставить ссылку на гугл-диск с изображением в любое время, когда оно было загружено.
С помощью @Tanaike мне удалось получить ссылку URL-адреса с диска Google на листе Google, когда я предварительно назначил часть имени папки (fn) и заголовка изображения (i) в пределах Функция getFileUrl (fn, i) в «Code.gs». Но я получаю это "TypeError: Невозможно вызвать метод" getFilesByName "из неопределенного." вывод всякий раз, когда я пытаюсь передать пользовательский ввод "fn" и "i".
page.html
- Это внешний интерфейс, куда пользователь загружает картинку
<html>
<head>
<body>
<form action="#" method="post" enctype="multipart/form-data">
<div class="row">
<div class="file-field input-field">
<div class="waves-effect waves-light btn-small">
<i class="material-icons right">insert_photo</i>
<span>Import Picture</span>
<input id="files" type="file" name="image">
</div>
<div class="file-path-wrapper">
<input disabled selected type="text" class="file-path
validate" placeholder="Choose an image">
</div>
</div>
</div>
</form>
<?!= include("page-js"); ?>
</div> <!-- CLOSE CONTAINER-->
</body>
</html>
Это часть javascript для помещения соответствующей информации в массив, который позже будет использоваться для добавления строки в лист google
страница-js.html
Это часть javascript для загрузки файла изображения на диск Google
(все еще часть page-js.html)
var file,
reader = new FileReader();
var today = new Date();
var date = today.getFullYear()+'-'+(today.getMonth()+1)+'- '+today.getDate();
reader.onloadend = function(e) {
if (e.target.error != null) {
showError("File " + file.name + " could not be read.");
return;
} else {
google.script.run
.withSuccessHandler(showSuccess)
.uploadFileToGoogleDrive(e.target.result,num.picNum,date,$('input#fn')
.val(),$('input#date').val());
}
};
function showSuccess(e) {
if (e === "OK") {
$('#forminner').hide();
$('#success').show();
} else {
showError(e);
}
}
function submitForm() {
var files = $('#files')[0].files;
if (files.length === 0) {
showError("Please select a image to upload");
return;
}
file = files[0];
if (file.size > 1024 * 1024 * 5) {
showError("The file size should be < 5 MB.");
return;
}
showMessage("Uploading file..");
reader.readAsDataURL(file);
}
function showError(e) {
$('#progress').addClass('red-text').html(e);
}
function showMessage(e) {
$('#progress').removeClass('red-text').html(e);
}
</script>
Эта часть захватывает массив "userInfo" и добавляет контент в строку на указанном листе Google. В любое время я нажимаю на кнопку в передней части, она создает новую строку.
Именно здесь, если я вручную установлю значения fn и i в функции getFileUrl и получу соответствующее изображение и папку в указанном каталоге, я получу действительную ссылку на своем листе Google. Однако, если я оставлю аргумент в качестве переменных, введенных пользователем в веб-приложении, я получу вышеупомянутую ошибку в моей ссылке на листе.
Code.gs
//google sheet web script
var url="https://docs.google.com/spreadsheets/d/XXXXX";
function getFileUrl(fn,i){
try{
var today0 = new Date();
var date0 = today0.getFullYear()+'-'+(today0.getMonth()+1)+'-'
+today0.getDate();
var dropbox0 = "OE Audit Pictures";
var folder0,folders0 = DriveApp.getFoldersByName(dropbox0);
while (folders0.hasNext())
var folder0=folders0.next();
var dropbox20=[date0,fn].join(" ");
var folder20,folders20=folder0.getFoldersByName(dropbox20);
while (folders20.hasNext())
var folder20=folders20.next();
var file0, files0= folder20.getFilesByName(i);
while (files0.hasNext())
var file0=files0.next();
var fileId0=file0.getUrl();
return fileId0;
} catch(f){
return f.toString();
}
}
function userClicked(userInfo){
var ss= SpreadsheetApp.openByUrl(url);
var ws=ss.getSheetByName("Data");
ws.appendRow([userInfo.number,new Date(),
userInfo.firstName,userInfo.fileUrl]);
}
function include(filename){
return HtmlService.createHtmlOutputFromFile(filename).getContent();
}
function uploadFileToGoogleDrive(data, file, fn, date) {
try {
var dropbox = "OE Audit Pictures";
var folder, folders = DriveApp.getFoldersByName(dropbox);
if (folders.hasNext()) {
folder = folders.next();
} else {
folder = DriveApp.createFolder(dropbox);
}
var contentType = data.substring(5,data.indexOf(';')),
bytes =
Utilities.base64Decode(data.substr(data.indexOf('base64,')+7)),
blob=Utilities.newBlob(bytes, contentType, file)
var dropbox2=[fn,date].join(" ");
var folder2, folders2=folder.getFoldersByName(dropbox2)
if (folders2.hasNext()){
folder2=folders2.next().createFile(blob);
} else {
file = folder.createFolder([fn,date].join(" ")).createFile(blob);
}
return "OK";
} catch (f) {
return f.toString();
}
}