#javascript #transfer
#javascript #передача
Вопрос:
Я хотел бы перенести несколько изображений из ESP32 на Google Диск и в том же скрипте записать URL-адрес изображения вместе с датой и временем в таблице Google для последующего доступа.
Сценарий, который я использую для получения изображения на стороне Google Диска, выглядит следующим образом:
function doPost(e) {
var myFoldername = e.parameter.myFoldername;
var myFile = e.parameter.myFile;
var myFilename = e.parameter.myFilename;
//var myFilename = Utilities.formatDate(new Date(), "GMT", "yyyyMMddHHmmss") "-" e.parameter.myFilename;
var myToken = e.parameter.myToken;
var contentType = myFile.substring(myFile.indexOf(":") 1, myFile.indexOf(";"));
var data = myFile.substring(myFile.indexOf(",") 1);
data = Utilities.base64Decode(data);
var blob = Utilities.newBlob(data, contentType, myFilename);
// Save a captured image to Google Drive.
var folder, folders = DriveApp.getFoldersByName(myFoldername);
if (folders.hasNext()) {
folder = folders.next();
} else {
folder = DriveApp.createFolder(myFoldername);
}
var file = folder.createFile(blob);
file.setDescription("Uploaded by " myFilename);
var imageID = file.getUrl().substring(file.getUrl().indexOf("/d/") 3,file.getUrl().indexOf("view")-1);
var imageUrl = "https://drive.google.com/uc?authuser=0amp;id=" imageID;
// Send a link message to Line Notify.
var res = "Line Notify: ";
try {
var url = 'https://notify-api.line.me/api/notify';
var response = UrlFetchApp.fetch(url, {
'headers': {
'Authorization': 'Bearer ' myToken,
},
'method': 'post',
'payload': {
'message': imageUrl
}
});
res = response.getContentText();
} catch(error) {
res = error;
}
//Here is where the code to save imageUrl to Google Sheet was added **********
return ContentService.createTextOutput(myFoldername "/" myFilename "n" imageUrl "n" res);
}
Что мне нужно добавить, чтобы сохранить «ImageUrl» в Google Sheet?
Я попытался сохранить его на текущем листе, то есть на листе, к которому прикреплен этот скрипт, но я получаю сообщение об ошибке.
В строку, указанную выше, я добавил приведенный ниже код, который я вырезал из скрипта, который записывает только в Goggle sheet (без передачи изображения), но не сохраняет URL-адрес изображения и жалуется на строку: var sheet = getSpreadSheet();
//-------------------------------------------------------------------------------
var result = 'Ok'; // default result
if (e.parameter == 'undefined') {
result = 'No Parameters';
} else {
var alarm= e.parameter.alarm;
if (typeof alarm != 'undefined') {
sendEmail("alarm text:" stripQuotes(alarm));
return ContentService.createTextOutput(result);
}
var sheet = getSpreadSheet(); //---> Error here
var lastRow = sheet.getLastRow();
var newRow = 1;
if (lastRow > 0) {
var lastVal = sheet.getRange(lastRow, 1).getValue();
//if there was no info for (sentEmailIfUnitIsOutForMinutes) checkIfDead() function will append row with 'dead' text
// so checking do we need to override it
if (lastVal == 'dead')
newRow = lastRow; //to overwrite "dead" value
else
newRow = lastRow 1;
}
var rowData = [];
var namesOfParams=[];
for (var param in parseQuery(e.queryString))
namesOfParams.push(param);
//creatating headers if first row
if (newRow == 1) {
rowData[0] = "Date";
var i = 1;
for (var i=0; i<namesOfParams.length;i ) {
rowData[i 1] = namesOfParams[i];
}
var newRange = sheet.getRange(newRow, 1, 1, rowData.length);
newRange.setValues([rowData]);
rowData = [];
newRow ;
}
rowData[0] = Utilities.formatDate(new Date(), timeZone, dateTimeFormat);
for (var i=0; i<namesOfParams.length;i ) {
var value = stripQuotes(e.parameter[namesOfParams[i]]);
rowData[i 1] = value;
}
var newRange = sheet.getRange(newRow, 1, 1, rowData.length);
newRange.setValues([rowData]);
}
//---------------------------------------------------------------------------------
Помощь высоко ценится.
Спасибо
Комментарии:
1. это [javascript]?
2. Скрипты Google — это JavaScript. Приведенный ниже скрипт Google решает проблему.
Ответ №1:
Проблема решена с помощью следующего скрипта:
var timeZone = "GMT";
var dateTimeFormat = "dd/MM/yyyy HH:mm:ss";
var logSpreadSheetId = "1W1ypQEkfKNFSqhtfgbjbjFgzHO8LDaTv6mNWTP9h4M8";
// logSpreadSheetId is to be copied from the sheet's URL as follows: https://docs.google.com/spreadsheets/d/1W1ypQEkfKNFSqhtfgbjbjFgzHO8LDaTv6mNWTP9h4M8/edit#gid=0
function doPost(e) {
var myFoldername = e.parameter.myFoldername;
var myFile = e.parameter.myFile;
//var myFilename = e.parameter.myFilename;
//var myFilename = Utilities.formatDate(new Date(), timeZone, "ddMMyyyyHHmmss") "-" e.parameter.myFilename;
var myFilename = Utilities.formatDate(new Date(), timeZone, "ddMMyyyyHHmmss") ".jpg";
var myToken = e.parameter.myToken;
var contentType = myFile.substring(myFile.indexOf(":") 1, myFile.indexOf(";"));
var data = myFile.substring(myFile.indexOf(",") 1);
data = Utilities.base64Decode(data);
var blob = Utilities.newBlob(data, contentType, myFilename);
// Save a captured image to Google Drive.
var folder, folders = DriveApp.getFoldersByName(myFoldername);
if (folders.hasNext()) {
folder = folders.next();
} else {
folder = DriveApp.createFolder(myFoldername);
}
var file = folder.createFile(blob);
file.setDescription("Uploaded by " myFilename);
var imageID = file.getUrl().substring(file.getUrl().indexOf("/d/") 3,file.getUrl().indexOf("view")-1);
var imageUrl = "https://drive.google.com/uc?authuser=0amp;id=" imageID;
addLog(myFilename,imageUrl);
return ContentService.createTextOutput(myFoldername "/" myFilename "n" imageUrl "n"); // res);
}
function addLog(myFilename,imageUrl) {
var spr = SpreadsheetApp.openById(logSpreadSheetId);
var sheet = spr.getSheets()[0];
var data = sheet.getDataRange().getValues();
var pos = sheet.getLastRow();
var rowData = [];
if(!pos>0){
pos = 1;
rowData[0] = "Date";
rowData[1] = "Image";
rowData[2] = "URL";
var newRange = sheet.getRange(pos, 1, 1, rowData.length);
newRange.setValues([rowData]);
}
pos = pos 1;
rowData = [];
rowData[0] = Utilities.formatDate(new Date(), timeZone, dateTimeFormat);
rowData[1] = myFilename;
rowData[2] = imageUrl;
var newRange = sheet.getRange(pos, 1, 1, rowData.length);
newRange.setValues([rowData]);
}
Кроме того, для простоты лист и скрипт теперь находятся в независимых файлах, поскольку скрипт может ссылаться на лист, используя его идентификатор, как в:
var logSpreadSheetId = «1W1ypQEkfKNFSqhtfgbjbjFgzHO8LDaTv6mNWTP9h4M8»;.