gpt4 book ai didi

express - 从 express 的公共(public)文件夹中提供 git-lfs 文件

转载 作者:行者123 更新时间:2023-12-04 06:56:41 26 4
gpt4 key购买 nike

我在 Heroku 上使用 node.js (express),其中 slug size is limited to 300MB .

为了让我的 slug 保持小,我想使用 git-lfs 来跟踪我的 express 'public文件夹。

这样,我的所有 Assets (图像、视频...)都上传到 lfs 商店(比如 AWS S3),然后 git-lfs 离开 a pointer file (其中可能包含 S3 URL?)。

从公用文件夹提供文件时,我想快速重定向到远程 S3 文件。

我的问题是我不知道如何从指针文件的内容中检索 URL ...

app.use('/public/:pointerfile', function (req, res, next) {
var file = req.params.pointerfile;
fs.readFile('public/'+file, function (er, data) {
if (er) return next(er);

var url = retrieveUrl(data); // <-- HELP ME HERE with the retrieveUrl function

res.redirect(url);
});
});

你不认为快速读取和解析所有 public/* 的成本不会太高吗?文件。也许我可以在解析后缓存 URL?

最佳答案

实际上是pointer文件中不包含任何 url 信息(如您提供的链接或 here 所示) - 它只保留 oid (对象 ID)为只是它的 sha256 的 blob .

但是,您可以使用 oid 来实现您正在寻找的东西。和 lfs api允许您下载特定的oid使用 batch request .

您可以从 .git/config 中分辨出用于存储 blob 的端点是什么。可以接受非默认 lfsurl标签,例如:

[remote "origin"]
url = https://...
fetch = +refs/heads/*:refs/remotes/origin/*
lfsurl = "https://..."

或单独的
[lfs]
url = "https://..."

如果没有 lfsurl标记,那么您正在使用 GitHub 的端点(它可能又重定向到 S3):
Git remote: https://git-server.com/user/repo.git
Git LFS endpoint: https://git-server.com/user/repo.git/info/lfs

Git remote: git@git-server.com:user/repo.git
Git LFS endpoint: https://git-server.com/user/repo.git/info/lfs

但是您应该针对它而不是直接针对 S3,因为 GitHub 的重定向响应也可能包含一些身份验证信息。

查看 batch response查看响应结构的文档 - 您基本上需要解析相关部分并自己调用以检索 blob(这是 git lfs 在结帐期间代替您所做的)。

一个典型的响应(取自我引用的文档)看起来像:
{
"_links": {
"download": {
"href": "https://storage-server.com/OID",
"header": {
"Authorization": "Basic ...",
}
}
}
}

所以你会 GET https://storage-server.com/OID随便 headers从批处理响应中返回 - 最后一步是重命名返回的 blob(它的名称通常只是 oid,因为 git lfs 使用基于校验和的存储) - 指针文件具有原始资源的名称,因此只需重命名那个 Blob 。

关于express - 从 express 的公共(public)文件夹中提供 git-lfs 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36902385/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com