使用 google 云函数记录文件下载并将文件下载到客户端

Use google cloud function to log file downloads and download file to client

我在 google 云存储桶中有一些公开可用的文件,links 在静态站点上。我想在用户下载文件时进行记录,同时使 link 表现得像正常下载 link.

我最初的想法是使用 link 调用云函数并将其传递给 object 名称。云函数可以执行它需要的任何日志记录逻辑,并将文件传递给客户端。

我的问题是关于如何将文件传递给客户端,就好像他们只是点击了正常下载一样 link。我想我需要插入一些 headers,也许?

您可以使用 HTTP functions 记录事件,然后将用户重定向到实际的 Google 云存储 link。为此,必须使用 Cloud 函数的 URL 作为面向 URL 的用户以及文件标识符参数。

这是一个示例函数:

exports.downloadFile = (req, res) => {
  const {fileId} = req.query
  // TODO: Get the file URL
  // TODO: Log the event
  res.redirect(FILE_URL);
};

您的函数 URL 看起来像这样:

https://[FN_REGION]-[PROJECT_ID].cloudfunctions.net/[FN_NAME]?fileId=the_file_id

程序如下:

  • 当用户单击下载按钮时,您必须在新选项卡中打开此 link,这将向您的云功能发出 GET 请求。

  • 该函数然后将从查询参数中读取 fileId,记录事件并将用户重定向到浏览器中的实际文件 URL。

这仍然需要用户单击按钮一次,但会在记录事件后为他们提供实际下载 URL。