【发布时间】:2019-04-27 04:23:45
【问题描述】:
我想在网页上从谷歌驱动器复制音乐文件。我有每个文件的链接,但调用的响应缓存标头是“无缓存,无存储,最大年龄 = 0,必须重新验证”,因此它永远不会保存在浏览器缓存中。有什么办法将缓存添加到谷歌驱动文件请求?
问题:
当您为音乐文件 (mp3) https://drive.google.com/a/pucp.pe/uc?id=1kYYS9FZ9Vxif5WJM9ZQcY4SR35NMgoIE&export=download 使用驱动器链接时,GET API 调用会收到一个 302 代码,该代码会生成一个重定向到另一个 URL,在本例中为“https://doc-0o-28-docs.googleusercontent.com/docs/securesc/bgp95l3eabkkpccn0qi0qopvc4e7d4mq/us95e8ush1v4b7vvijq1vj1d7ru4rlpo/1556330400000/01732506421897009934/01732506421897009934/1kYYS9FZ9Vxif5WJM9ZQcY4SR35NMgoIE?h=14771753379018855219&e=download”。每个调用的标题中都有no-cache。
我尝试使用工作箱(缓存 API),但找不到缓存重定向的方法,可能我需要缓存两个调用(第一个 GET 和重定向)。但是,如果我使用重定向的 URL,缓存会起作用,但在第一次调用之前我无法访问该 URL。
我尝试使用来自 NodeJS 服务器的代理服务器
app.get("/test", (req, res) => {
try {
https.get(
URL,
function(response) {
res.writeHead(response.statusCode, {...response.headers,
"Cache-Control": "public, max-age=120",
"Expires": new Date(Date.now() + 120000).toUTCString() })
response.pipe(res);
}
);
} catch (e) {
console.log(e);
}
});
我尝试使用第一个 URL,但没有成功。 我尝试使用重定向 URL,但得到“状态代码:找到 302”
一种解决方案可能是直接从我的服务器下载文件并提供它,但我会错过使用驱动器存储的意义。我真的很想使用谷歌驱动器存储,而不是复制我服务器上的所有文件。
有没有推荐的方法来做这种情况下的缓存?也许我缺少一些谷歌驱动器配置。或者您知道在这种情况下我可以采取的另一种方法吗?
【问题讨论】:
标签: node.js caching google-drive-api google-api-nodejs-client workbox