Google 课堂作业附件链接格式错误 - HTML 而不是 jpg 或 pdf

问题描述 投票:0回答:1

我有一张谷歌表格,将材料分配发布到谷歌课堂。其中包括“证据”图像和 pdf 附件。发布材料时,附件将链接为 HTML。该代码似乎正在将图像文件 (jpg) 转换为 HTML。

这是上传功能。我尝试添加不同的文件扩展名,但这没有任何区别。

function uploadFileToDrive(url) {
  var response = UrlFetchApp.fetch(url, {
    headers: {
      Authorization: 'Bearer ' + ScriptApp.getOAuthToken()
    }
  });
  var contentType = response.getHeaders()['Content-Type'];
  var fileExtension = url.substring(url.lastIndexOf('.') + 1);
  var mimeType;
  switch (fileExtension) {
    case 'jpg':
      mimeType = 'image/jpg';
      break;
    case 'pdf':
      mimeType = 'application/pdf';
      break;
    // Add more cases for other file types as needed
    default:
      mimeType = contentType;
      break;
  }
  var file = Drive.Files.insert({
    title: "evidence",
    mimeType: mimeType
  }, response.getBlob());
  return file.id;
}
google-apps-script google-sheets google-classroom
1个回答
0
投票

正如我的猜测,从您之前的问题,如果您使用

https://drive.google.com/open?id=###spreadsheetId###
作为
url
的值,在这种情况下,我认为使用您的显示脚本创建的文件是登录屏幕的HTML数据.我认为这可能是您当前问题的原因。

如果要将Google Spreadsheet导出为PDF文件,下面的修改如何?

修改脚本:

在这种情况下,请使用文件ID。如果您使用像

https://drive.google.com/open?id=###spreadsheetId###
这样的 URL,
###spreadsheetId###
是文件 ID。

function uploadFileToDrive(fileId) {
  var blob = DriveApp.getFileById(fileId).getBlob();
  var file = Drive.Files.insert({ title: "evidence" }, blob);
  return file.id;
}
  • 对于 Google 文档文件(文档、电子表格、幻灯片),当从文件中检索到 blob 时,mimeType 会自动转换为 PDF 格式。我以为这个情况可以用

新增:

从您的以下回复中,

运行它会在获取对象 DriveApp 上的方法或属性 getFileById 时出现意外错误。 uploadFileToDrive @ var blob = DriveApp.getFileById(fileId).getBlob(); createMaterialsFromGoogleSheet @ evidenceId = uploadFileToDrive(evidenceLink);

这是向前迈出的一步吗?函数 uploadFileToDrive(fileId) { var blob = Drive.Files.get(fileId).getBlob(); var fileMetadata = { title: file.title }; var uploadedFile = Drive.Files.insert(fileMetadata, blob);返回 uploadedFile.id; } 出现此错误 - GoogleJsonResponseException:对 drive.files.get 的 API 调用失败,出现错误:找不到文件:drive.google.com/open?id=18exMxxxxxxxxxNbbMAqVnJOxxxxxxxxx - 我是该文件的所有者,可以在浏览器中查看它。

在我最初的回答中,我提到了

In this case, please use the file ID. If you are using a URL like https://drive.google.com/open?id=###spreadsheetId###, ###spreadsheetId### is the file ID.
。但是,从您的回复来看,如果我的理解是正确的,不幸的是,我担心您仍然使用 URL。因为,当为我的脚本提供无效的文件 ID 时,会发生同样的错误。如果我的理解是正确的,请使用文件ID而不是URL,并再次测试。

如果需要使用像

https://drive.google.com/open?id=###spreadsheetId###
这样的URL,请修改上面的脚本如下

function uploadFileToDrive(url) {
  var fileId = url.split("=")[1].split("&")[0];
  var blob = DriveApp.getFileById(fileId).getBlob();
  var file = Drive.Files.insert({ title: "evidence" }, blob);
  return file.id;
}
  • 但是,如果 URL 与

    https://drive.google.com/open?id=###spreadsheetId###
    不同,则会发生错误。请注意这一点。

  • 而且,如果你直接使用文件ID,请使用我第一个建议的脚本。请注意这一点。

© www.soinside.com 2019 - 2024. All rights reserved.