3

我需要使用 GS 下载图像并将其保存在特定的驱动器文件夹中。我可以将图像保存在根文件夹中,但无法将其保存在特定文件夹中:

    function downloadFile(fileURL,folder) {  

  var fileName = "";
  var fileSize = 0;

  var response = UrlFetchApp.fetch(fileURL, {muteHttpExceptions: true});
  var rc = response.getResponseCode();

  if (rc == 200) {
    var fileBlob = response.getBlob()
    var folder = DriveApp.getFoldersByName(folder);
    if (folder != null) {
      var file = DriveApp.createFile(fileBlob);
      fileName = file.getName();
      fileSize = file.getSize();
    }
  }

  var fileInfo = { "rc":rc, "fileName":fileName, "fileSize":fileSize };
  return fileInfo;
}

问题:我要添加什么才能使用变量“文件夹”?

我发现了很多不再使用的“DocList”类示例

非常感谢

4

3 回答 3

2

好吧,我猜 GAS 在开发其 API 方面取得了很大进展, createFile(blob)对象文件夹的功能将完成这项工作: https ://developers.google.com/apps-script/reference/drive/folder#createfileblob

// Create an image file in Google Drive using the Maps service.
var blob = Maps.newStaticMap().setCenter('76 9th Avenue, New York NY').getBlob();
DriveApp.getRootFolder().createFile(blob);

答案已经很晚了,但以防万一有人遇到这种情况。

于 2018-10-15T14:11:49.650 回答
1

你熟悉这个应用程序吗?它完全符合您的要求。

但是,如果您想出于自己的目的重新创建它,我会将您的变量声明更改file为:

var file = folder.next().createFile(fileBlob);

创建变量时folder,您使用的方法会创建一个FolderIterator,而不是单个文件夹。您必须调用该next()方法才能获取Folder对象。

为了准确地使用您的脚本并避免保存到不正确但名称相似的文件夹,我建议将文件夹 ID 而不是文件夹名称传递给您的脚本。如果传递文件夹 ID,则可以声明folder为:

var folder = DriveApp.getFolderById(folder);

然后继续编写脚本。我希望这会有所帮助。

于 2015-12-01T19:54:08.417 回答
0

处理类似的问题,我想出了下面的解决方案,将文件保存到文件夹中。如果文件夹不存在,则创建它,否则保存“FOLDER_NAME”指定的文件

  var folderExists = checkFolderExists("FOLDER_NAME");

  if (folderExists) {
     saveFolder = DriveApp.getFolderById(folderExists);
  } else {
     saveFolder = DriveApp.createFolder("FOLDER_NAME");
  }

  // Make a copy of the file in the root drive.
  var file = DriveApp.getFileById(sheetID);
  // Take the copy of the file created above and move it into the folder:
  var newFile = DriveApp.getFolderById(saveFolder.getId()).addFile(file);

  // Remove the copy of the file in the root drive.
  var docfile = file.getParents().next().removeFile(file);

除了 Eric 的回答,我还提供了一个实用程序函数来检查文件夹是否存在。它可以在任何项目中重复使用。

function checkFolderExists(fName) {
  try {
    var folderId;
    var folders = DriveApp.getFolders();

    while (folders.hasNext()) {
      var folder = folders.next();
      folderName = folder.getName();
      if (folderName == fName) {
         folderId = folder.getId();
      }
    }
  } catch(e) {
    log("Services::checkFolderExists()" + e.toString());
    throw e;
  }  
  return folderId;
 }
于 2017-04-12T22:51:58.583 回答