#google-apps-script #google-sheets
#google-apps-script #google-sheets
Вопрос:
Я хочу создать электронную таблицу CMS — то есть для чтения / записи данных из firebase и наоборот. Я достиг точки, когда мне нужно загружать файлы непосредственно из электронной таблицы, а не с любой другой страницы.
Я добавил пользовательское меню с HtmlService для вывода шаблона, в котором пользователь может щелкнуть и загрузить файл, и этот файл должен обрабатываться в Google script, но проблема в том, что я получаю только поддельный путь к файлу «c:/fakepath/avatar.png » и не большой двоичный объект.
мои файлы в Google script:
upload.html
<!DOCTYPE html>
<html>
<head>
<base target="_top">
<link rel="stylesheet" href="https://ssl.gstatic.com/docs/script/css/add-ons1.css">
</head>
<body>
<div>
<div id="progress" ></div>
<input type="file" name="upload" id="file">
<input type="submit" value="Submit" class="action" onclick="form_data()" >
<input type="button" value="Close" onclick="google.script.host.close()" />
</div>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js">
</script>
<script>
function form_data(){
var values = [{
"file":$("#upload").val(),
}];
google.script.run.withSuccessHandler(closeIt).upload(values);
};
function closeIt(){
google.script.host.close()
};
</script>
</body>
</html>
test.gs
function upload(values){
//Display the values submitted from the dialog box in the Logger.
Logger.log(values); // here I'm getting file = c/fakepath/avatar.png while I
//need the file to send it as a post request or save it in google drive
};
Я считаю, что мне следует использовать FileReader, но я попытался и потерпел неудачу:
var file,
reader = new FileReader();
// Upload the file to Google Drive
reader.onloadend = function(e) {
google.script.run
.upload(
e.target.result, file.name
);
};
function form_data(){
reader.readAsDataURL(file);
}
Ответ №1:
- Вы хотите загрузить файл с помощью диалогового окна в документах Google на Google Диск.
Если я правильно понимаю, как насчет этой модификации? Пожалуйста, подумайте об этом как об одном из нескольких ответов.
Модифицированный скрипт:
Скрипт Google Apps:
function upload(obj) {
var file = DriveApp.createFile(obj.upload);
return {
fileId: file.getId(),
mimeType: file.getMimeType(),
fileName: file.getName(),
};
}
HTML:
Пожалуйста, замените <body>...</body>
следующим образом. В этой модификации jquery не используется.
<body>
<form> <!-- Modified -->
<div id="progress" ></div>
<input type="file" name="upload" id="file">
<input type="button" value="Submit" class="action" onclick="form_data(this.parentNode)" >
<input type="button" value="Close" onclick="google.script.host.close()" />
</form>
<script>
function form_data(obj){ // Modified
google.script.run.withSuccessHandler(closeIt).upload(obj);
};
function closeIt(e){ // Modified
console.log(e);
google.script.host.close();
};
</script>
</body>
Примечание:
- Когда вы загрузили файл, возвращаются идентификатор файла, его тип и имя файла созданного файла. Вы можете увидеть их на консоли.
- В этом методе, поскольку
blob
используется, максимальный размер файла составляет 50 МБ. Пожалуйста, будьте осторожны с этим.
Если я неправильно понял ваш вопрос, и это был не тот результат, который вы хотите, я приношу извинения.
Комментарии:
1. @ilya Спасибо за ответ. Я рад, что ваша проблема была решена.