我正在创建一个谷歌附加的谷歌驱动器。我使用DriveApp类访问和处理文件。我希望能够生成一个下载文件的链接。最后,我希望将此下载链接发送到服务器,以便进行进一步的文件处理。
DriveApp的文件类似乎有一个完美的方法,file.getDownloadUrl(),它“获取可用于下载文件的URL”。
不幸的是,我看到了一些奇怪的行为,我不确定我是否正确地使用了这个方法。
首先,当对Google的文件类型(例如application/vnd.google-apps.document或application/vnd.google-apps.spreadsheet )调用时,该方法返回null。我们可能需要为要导出的文件类型设置某种参数,这是有意义的,但这似乎不是getDownloadUrl()的一个选项。
其次,当getDownloadUrl()返回一个url时,对url的访问将受到严格限制。除非我在Chrome上,并签署到文件所有者的G套件帐户,我不能访问该文件。登录所有者帐户,但在Firefox上浏览也会返回403错误。
我在一组驱动API凭据上运行了一个烧瓶服务器。是否有方法授权这些凭据访问此下载链接?
任何帮助都将不胜感激!
发布于 2021-08-06 15:17:32
具有Google类型的文件不能直接下载,file.getDownloadUrl()返回null。
例如,电子表格。
在手动下载之前,您可以看到该文件已转换为.xlsx。因此,要下载它,您需要将该文件转换为某种文件。
// --- Apps Script ---
let new_file = Drive.Files.insert({ //DriveApi
title: file.getName(), //name
parents: [{
id: file.getParents().next().getId() //folder
}],
mimeType: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" //new mimeType
},
file.getBlob()
);
console.log(new_file.getDownloadUrl())但是,要从这个链接下载一个文件,您需要登录到Google并访问驱动器中的文件。
否则,您可以获取文件的斑点并将其转换为另一个位置的文件,例如服务器上的文件。
// --- Apps Script ---
let blob = file.getBlob()
let blob_type = blob.getContentType() // for some reason, this is a application/pdf, so it will download as .pdf
let blob_string = blob.getDataAsString() // data of this blob as a String with UTF-8 encoding // --- JS ---
// convert to js blob
let js_blob = new Blob([blob_string], {
type: blob_type
});
// and download
let a = document.createElement("a")
document.body.appendChild(a)
a.style = "display: none"
let url = window.URL.createObjectURL(js_blob)
a.href = url
a.download = "fileName.pdf" //file name and extension
a.click()
a.remove()
window.URL.revokeObjectURL(url)https://stackoverflow.com/questions/63997051
复制相似问题