首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >file.getDownloadUrl()不适用于Google附加应用程序脚本

file.getDownloadUrl()不适用于Google附加应用程序脚本
EN

Stack Overflow用户
提问于 2020-09-21 17:15:20
回答 1查看 492关注 0票数 2

我正在创建一个谷歌附加的谷歌驱动器。我使用DriveApp类访问和处理文件。我希望能够生成一个下载文件的链接。最后,我希望将此下载链接发送到服务器,以便进行进一步的文件处理。

DriveApp的文件类似乎有一个完美的方法,file.getDownloadUrl(),它“获取可用于下载文件的URL”。

不幸的是,我看到了一些奇怪的行为,我不确定我是否正确地使用了这个方法。

首先,当对Google的文件类型(例如application/vnd.google-apps.documentapplication/vnd.google-apps.spreadsheet )调用时,该方法返回null。我们可能需要为要导出的文件类型设置某种参数,这是有意义的,但这似乎不是getDownloadUrl()的一个选项。

其次,当getDownloadUrl()返回一个url时,对url的访问将受到严格限制。除非我在Chrome上,并签署到文件所有者的G套件帐户,我不能访问该文件。登录所有者帐户,但在Firefox上浏览也会返回403错误。

我在一组驱动API凭据上运行了一个烧瓶服务器。是否有方法授权这些凭据访问此下载链接?

任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

发布于 2021-08-06 15:17:32

具有Google类型的文件不能直接下载,file.getDownloadUrl()返回null。

例如,电子表格。

在手动下载之前,您可以看到该文件已转换为.xlsx。因此,要下载它,您需要将该文件转换为某种文件。

代码语言:javascript
运行
复制
    // --- 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并访问驱动器中的文件。

否则,您可以获取文件的斑点并将其转换为另一个位置的文件,例如服务器上的文件。

代码语言:javascript
运行
复制
    // --- 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
代码语言:javascript
运行
复制
    // --- 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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63997051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档