我有一张谷歌表格,将材料分配发布到谷歌课堂。其中包括“证据”图像和 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;
}
正如我的猜测,从您之前的问题,如果您使用
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;
}
从您的以下回复中,
运行它会在获取对象 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,请使用我第一个建议的脚本。请注意这一点。