Я хочу сделать электронную таблицу CMS - то есть читать/записывать данные из firebase и наоборот. Я достиг точки, когда мне нужно загружать файлы непосредственно из электронной таблицы, а не с какой-либо другой страницы.
Я добавил пользовательское меню с htmlService для вывода шаблона, в котором пользователь может щелкнуть и загрузить файл, и этот файл должен быть обработан в сценарии Google, но проблема в том, что я получаю только поддельный путь к файлу "c :/fakepath/avatar.png", а не блоб.
мои файлы в гугл скрипте:
загрузить.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);
}
Если я правильно понимаю, как насчет этой модификации? Пожалуйста, подумайте об этом как об одном из нескольких ответов.
function upload(obj) {
var file = DriveApp.createFile(obj.upload);
return {
fileId: file.getId(),
mimeType: file.getMimeType(),
fileName: file.getName(),
};
}
Пожалуйста, замените <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.info(e);
google.script.host.close();
};
</script>
</body>
blob
, максимальный размер файла составляет 50 МБ. Пожалуйста, будьте осторожны с этим.Если я неправильно понял ваш вопрос, и это не тот результат, который вы хотите, приношу свои извинения.
@ilya Спасибо за ответ. Я рад, что ваша проблема была решена.