如何获取谷歌驱动器中的图像文件的URL

时间:2014-11-12 03:10:04

标签: google-apps-script google-drive-api

我尝试使用下面的脚本将存储在Google云端硬盘文件夹中的jpg图像插入电子表格中。我使用getUrl()方法获取的网址不起作用。但是,如果我使用此网址在Chrome中打开图片并右键点击该图片,然后选择“获取图片网址”,'我得到了一个可行的网址。是否有一个脚本方法可以获得正确的Url?或者是否有其他方法可以实现相同的结果?

function testInsertImage() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  var folder = DocsList.getFolder('DataBasePicts');
  var files = folder.getFiles(); 
  var img = files[0].getUrl();
  sheet.insertImage(img, 2, 2);  // In Class Sheet method 'insertImage(url, column, row)'
}

// Url obtained by the .getUrl() above which does not work
// "https://docs.google.com/open?id=1fxx_KYV46swKQk5vh9h1ideOhW76ZhJVYIPUjopbXm4"
// Url obtained by right clicking the image when opened in Chrome using above Url which does work
// "https://lh6.googleusercontent.com/eWA2oIabdGeXLnIRkTkdXuZFlvt6L_pJbgKBLoTFVDEWVESPxpvziHJnFpeXocMmnwUEvYWIab4=w1318-h612"
//.insertImage gives this error message:
// Error retrieving image from URL or bad URL: https://docs.google.com/open?

2 个答案:

答案 0 :(得分:0)

使用File的getWebContentLink()方法。

File file = serive.files().get(fileId).execute();
file.getWebContentLink()

答案 1 :(得分:0)

Advanced Drive Service可以使用Google Apps脚本中的Google Drive Web API。按照these instructions启用该服务后,其方法和属性将显示在GAS编辑器的自动填充功能中,便于浏览可用功能。

例如,ADS File对象具有一组属性documented here。您感兴趣的是.webContentLink。我们可以轻松地将ADS与替换已弃用的DocsList的DriveApp方法相结合,例如通过检索您感兴趣的图像的fileId并将其与ADS get()函数一起使用。

function testInsertImage() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  var folders = DriveApp.getFoldersByName('DataBasePicts');
  if (folders.hasNext()) {
    // Assume folder name is unique, so use first match
    var folder = folders.next();

    var files = folder.getFiles(); 
    if (files.hasNext()) {
      // For this test, use first found file
      var file = files.next();
      var img = Drive.Files.get(file.getId()).webContentLink;
      sheet.insertImage(img, 2, 2);  // In Class Sheet method 'insertImage(url, column, row)'
    }
    // else error: no file found
  }
  // else error: no folder found
}