Мне нужно знать, как добавить изображения из файлов на моем компьютере с Windows 10 на веб-сайт HTML-скрипта приложений Google - PullRequest
0 голосов
/ 02 мая 2019

Я хочу добавить изображения на веб-страницу скрипта приложений Google.

Я попытался просмотреть меню и проверить Google.

Я хочу, чтобы изображение отображалось в нужном размере

1 Ответ

0 голосов
/ 02 мая 2019

изображений из альбомов в моей библиотеке фотографий Google в веб-приложении

function doGet(e){
  return displayAlbums(true);
}

//used for web app and dialog depending upon weather web parameter is true or not.  If it's not provided then it's false. 
function displayAlbums(web) {
  var web=web||false;
  //different color backgrounds for each album
  var bgA=['#f3eeb3','#f3e2b3','#f3ceb3','#f3b3b6','#f3b3b6','#f3b3ef','#b3eaf3','#b3f3e3','#b3f3cb','#bdf3b3']
  var html='';
  var n=0;
  var albumsA=listAlbums();
  for(var i=0;i<albumsA.length;i++) {
    html+='<html><head></head><body>';
    html+=Utilities.formatString('<div id="d-%s" style="margin:auto;max-width:500px;background-color:%s;">',i,bgA[i]);
    html+=Utilities.formatString('<h1>%s</h1>', albumsA[i].title);
    var images=listImagesOfAnAlbum(albumsA[i].id);
    for(var j=0;j<images.length;j++) {
      html+=Utilities.formatString('<br />%s - %s<br /><img src="%s" width="500" />',j+1,images[j].filename, images[j].baseUrl);
    }
    html+='</div></body></html>';
  }
  if(!web) {
    var userInterface=HtmlService.createHtmlOutput(html).setWidth(600).setHeight(500);
    SpreadsheetApp.getUi().showModelessDialog(userInterface, 'Displaying my Albums');
  }else{
    var output=HtmlService.createHtmlOutput(html).setWidth(600).setHeight(500);
    return output.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL).addMetaTag('viewport', 'width=360, initial-scale=1');
  }
}

function listAlbums() {
  var token=null;
  var fA=[];
  var n=0;
  do{
    var params = {muteHttpExceptions:true,headers: {"Authorization": "Bearer " + ScriptApp.getOAuthToken()}};
    var url=Utilities.formatString('https://photoslibrary.googleapis.com/v1/albums?pageSize=50%s',(token!=null)?"&pageToken=" + token:"");
    var resp=UrlFetchApp.fetch(url,params);
    var js=JSON.parse(resp.getContentText());
    for(var i=0;i<js.albums.length;i++) {
      fA.push({id:js.albums[i].id,title:js.albums[i].title,count:js.albums.mediaItemsCount});
    }
    token=js.nextPageToken;
  }while(token!=null);
  Logger.log(fA);
  return fA;
}

function listImagesOfAnAlbum(albumId) {
  var albumId= albumId || 'Default Id for debugging';
  var token=null;
  var iA=[];
  var n=0;
  do{
    var params = {
      method:"post",
      muteHttpExceptions:true,
      headers: {"Authorization": "Bearer " + ScriptApp.getOAuthToken()},
      payload:{"albumId": albumId,"pageSize":"50","pageToken":token}};
    var url="https://photoslibrary.googleapis.com/v1/mediaItems:search";
    var resp=UrlFetchApp.fetch(url,params);
    var js=JSON.parse(resp.getContentText());
    for(var i=0;i<js.mediaItems.length;i++) {
      iA.push({filename:js.mediaItems[i].filename,baseUrl:js.mediaItems[i].baseUrl});
    }
    token=js.nextPageToken;
  }while(token!=null);
  return iA;
}

API Google Фото

Я добавил это в файл манифеста:

"exceptionLogging": "STACKDRIVER",
  "oauthScopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/photoslibrary", "https://www.googleapis.com/auth/script.container.ui", "https://www.googleapis.com/auth/script.external_request", "https://www.googleapis.com/auth/script.scriptapp", "https://www.googleapis.com/auth/spreadsheets"]

Кроме того, добавление этого в ваши скрипты Google, даже если вам это не нужно, спровоцирует аутентификатор на добавление необходимых областей.А также настройте Drive API в разделе Ресурсы Advanced Google Services.

//DriveApp.getFiles();
function listFiles() {
  var files = Drive.Files.list({
    fields: 'nextPageToken, items(id, title)',
    maxResults: 10
  }).items;
  for (var i = 0; i < files.length; i++) {
    var file = files[i];
    Logger.log('\n%s-Title: %s Id: %s',i+1,file.title,file.id);
  }
}

Этот метод описан Брюсом МакФерсоном как заимствование токена, о котором вы можете прочитать здесь

Я уже загрузил библиотеки Oauth2 и GOA.По словам мистера МакФерсона, вам нужно будет установить библиотеку GOA, хотя я никогда активно ее не использовал.Он прогуливается по здесь Просто пройдите его небольшую слайд-презентацию.Это может показаться большой проблемой, и это так.Но он предоставляет вам программный доступ к библиотеке фотографий.К счастью, Google делает все это для нас в большинстве наших библиотек.

С вашего персонального компьютера на ваш сайт с помощью DataURI

Еще один способ получить правильные изображенияс вашего Google Диска и на ваш веб-сайт.

enter image description here

Javascript в тегах <script> вашего сайта:

         google.script.run
         .withSuccessHandler(function(iObj){
           console.log(iObj);
           for(var i=0;i<iObj.iA.length;i++) {
             if(i==iObj.iA.length-1) {
               $('#header').css('background-image','URL(' + iObj[iObj.iA[i]] + ')');
             }else{
               $('#' + iObj.iA[i]).attr('src',iObj[iObj.iA[i]]);
             }
           }
         })
         .getSimpleSiteImages();
        });

Скрипт Google Apps:

function getSimpleSiteImages() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('SimpleSite');
  var rg=sh.getDataRange();
  var vA=rg.getValues();
  var oObj={iA:[]};
  for(var i=0;i<vA.length;i++) {
    oObj.iA[i]=vA[i][2];
    oObj[oObj.iA[i]]=getDataURI(vA[i][1]);
  }
  return oObj;
}

function getDataURI(fileId) {
  var file=DriveApp.getFileById(fileId);
  return file.getBlob().getDataAsString();
}

Скрипт Google Apps, который создает DataURI:

function convImageUrl(url){
  var blob=UrlFetchApp.fetch(url).getBlob();
  var b64Url='data:' + blob.getContentType() + ';base64,' + Utilities.base64Encode(blob.getBytes());
  return b64Url;
}

Просто сохраните на своем диске Google и загрузите их в свои изображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...