Image 如何将图像上传到Google Drive共享文件夹并获取其可共享URL?
目前,我有一个工作的Arduino应用程序,它可以拍照,上传到Goggle Drive文件夹(已经公开),并将一些相关数据存储在Google表单上,包括图像文件名 但我需要从其他地方运行的web应用程序访问这些数据和图像。 图像名称“filename.jpg”不能作为URL的一部分使用 在我当前的解决方案中,使用了两个脚本: 第一个成功地传输了图像。 第二步是在Google工作表中添加一行,其中包含所有必要的参数,但在这个阶段,我所拥有的只是filename.jpg 我需要在第二个脚本中添加一些内容来获取filename.jpg的URL,这样它就可以和相关数据一起存储在Google工作表中 如果我可以将两个脚本的功能合并到一个脚本中,它将完成这项工作,因为传输脚本可以访问文件ID,但我确实需要这方面的帮助 图像传输脚本:Image 如何将图像上传到Google Drive共享文件夹并获取其可共享URL?,image,web,url,directory,Image,Web,Url,Directory,目前,我有一个工作的Arduino应用程序,它可以拍照,上传到Goggle Drive文件夹(已经公开),并将一些相关数据存储在Google表单上,包括图像文件名 但我需要从其他地方运行的web应用程序访问这些数据和图像。 图像名称“filename.jpg”不能作为URL的一部分使用 在我当前的解决方案中,使用了两个脚本: 第一个成功地传输了图像。 第二步是在Google工作表中添加一行,其中包含所有必要的参数,但在这个阶段,我所拥有的只是filename.jpg 我需要在第二个脚本中添加一些
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=0&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;
}
return ContentService.createTextOutput(myFoldername+"/"+myFilename+"\n"+imageUrl+"\n"+res);
}
谷歌工作表脚本:
var timeZone = "UTC"; //get yours at https://www.timeanddate.com/time/zones/
var dateTimeFormat = "dd/MM/yyyy HH:mm";
var enableSendingEmails = true;
var emailAddress = ""; // comma separate for several emails
// 'bob@example.com';
// 'bob@example.com,admin@example.com';
function doGet(e) {
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();
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);
// namesOfParams=namesOfParams.reverse();
//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]);
}
// Return result of operation
return ContentService.createTextOutput(result);
}
// Remove leading and trailing single or double quotes
function stripQuotes(value) {
return value.replace(/^["']|['"]$/g, "");
}
function parseQuery(queryString) {
var query = {};
var pairs = (queryString[0] === '?' ? queryString.substr(1) : queryString).split('&');
for (var i = 0; i < pairs.length; i++) {
var pair = pairs[i].split('=');
query[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1] || '');
}
return query;
}
function sendEmail(message) {
if (!enableSendingEmails)
return;
var subject = 'Something wrong with your esp';
MailApp.sendEmail(emailAddress, subject, message);
}
function getSpreadSheet() {
return SpreadsheetApp.getActiveSheet();
}
var timeZone=“UTC”//把你的拿到https://www.timeanddate.com/time/zones/
var dateTimeFormat=“dd/MM/yyyy HH:MM”;
var enableSendingEmails=true;
var emailAddress=“”;//多封电子邮件用逗号分隔
// 'bob@example.com';
// 'bob@example.com,admin@example.com';
函数doGet(e){
var result='Ok';//默认结果
如果(e.parameter==‘未定义’){
结果='无参数';
}否则{
var报警=e.参数报警;
如果(报警类型!=“未定义”){
sendEmail(“报警文本:”+stripQuotes(报警));
返回ContentService.createTextOutput(结果);
}
var sheet=getSpreadSheet();
var lastRow=sheet.getLastRow();
var newRow=1;
如果(最后一行>0){
var lastVal=sheet.getRange(lastRow,1.getValue();
//如果(SentEmailIfUnitySoutForminutes)没有任何信息,则checkIfDead()函数将使用“dead”文本追加行
//那么我们需要覆盖它吗
如果(lastVal=='dead')
newRow=lastRow;//覆盖“死”值
其他的
newRow=lastRow+1;
}
var rowData=[];
var namesOfParams=[];
for(parseQuery中的var参数(e.queryString))
参数的名称。推送(参数);
//namesOfParams=namesOfParams.reverse();
//创建第一行的标题
if(newRow==1){
行数据[0]=“日期”;
var i=1;
对于(var i=0;i问题,使用以下脚本解决:
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=0&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]);
}
此外,为简单起见,工作表和脚本现在位于独立文件上,因为脚本可以使用其ID引用工作表,如:var logSpreadSheetId=“1w1ypqekfknfsqhtfgbjfgzho8ldatv6mnwtp9h4m8”;(请使用您自己工作表的ID)