- Например, когда 2 файла загружаются одной загрузкой, вы хотите поместить 2 URL в одну строку.
Я могу понять, как выше. И я могу подтвердить, что вышеприведенное понимание верно из вашего ответа . В этом случае, как насчет следующей модификации? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.
Точки изменения:
- В вашем скрипте файл загружается с асинхронным процессом. При этом URL-адреса помещаются строка за строкой. Чтобы размещать URL-адреса в одной строке при каждом процессе загрузки, сначала необходимо получить URL-адрес. Затем URL-адреса помещаются в одну строку.
Если это отражено в вашем скрипте, измените его следующим образом.
Модифицированный скрипт:
Google Apps Сторона сценария: Code.gs
Пожалуйста, измените функцию saveFile
и добавьте новую функцию putUrls
следующим образом. Укажите URL-адрес электронной таблицы.
function saveFile(obj) {
var blob = Utilities.newBlob(Utilities.base64Decode(obj.data), obj.mimeType, obj.fileName);
var file=DriveApp.createFile(blob);
var fileId= file.getId()
file.setSharing(DriveApp.Access.ANYONE_WITH_LINK,DriveApp.Permission.VIEW);
var fileUrl = "https://drive.google.com/uc?export=view&id="+fileId;
return fileUrl;
}
function putUrls(urls) {
Logger.log(urls)
var url = "https://docs.google.com/spreadsheets/d/###/edit#gid=0"; // <--- Please set this.
var ss = SpreadsheetApp.openByUrl(url);
var ws = ss.getSheetByName("DB");
ws.appendRow(urls);
}
HTML и Javascript side: index. html
Пожалуйста, измените Javascript следующим образом.
<script>
function saveFile(f, file, i) {
return new Promise((resolve, reject) => {
const fr = new FileReader();
fr.onload = (e) => {
const data = e.target.result.split(",");
const obj = {fileName: f.files[i].name, mimeType: data[0].match(/:(\w.+);/)[1], data: data[1]};
google.script.run.withSuccessHandler((url) => resolve(url)).withFailureHandler(e => reject(e)).saveFile(obj);
};
fr.readAsDataURL(file);
});
}
async function getFiles() {
let urls = [];
const f = document.getElementById('files');
for (var i = 0; i < f.files.length; i++) {
const url = await saveFile(f, f.files[i], i).catch(e => console.log(e));
urls.push(url);
}
google.script.run.putUrls(urls);
}
</script>
- В этой модификации файлы загружаются с синхронным процессом, а URL-адреса помещаются в массив. Затем массив обрабатывается в
putUrls
.
Примечание:
- При изменении сценария веб-приложений, пожалуйста, повторно разверните веб-приложения как новую версию , Таким образом, последний скрипт отражается на веб-приложениях. Пожалуйста, будьте осторожны с этим.