abe*_*ier 8 heroku amazon-s3 express git-lfs
我在Heroku上使用node.js(express),其中slug大小限制为300MB.
为了保持我的slug小,我想使用git-lfs来跟踪我的快递' public文件夹.
以这种方式,我的所有资产(图像,视频......)都被上传到lfs-store(比如AWS S3),而git-lfs会留下一个指针文件(里面可能包含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);
});
});
Run Code Online (Sandbox Code Playgroud)
您是否认为快速读取和解析可能的所有public/*文件不会太昂贵.也许我可以在解析后缓存URL?
dan*_*anf 10
实际上该pointer文件中不包含任何url信息(可以在你提供的链接中看到,或者在这里) - 它只保留oidblob 的(对象ID)sha256.
但是,您可以使用允许您使用批处理请求下载特定s oid的lfs api来实现您正在寻找的内容.oid
您可以知道用于存储Blob的端点是什么.git/config,可以接受非默认lfsurl标记,例如:
[remote "origin"]
url = https://...
fetch = +refs/heads/*:refs/remotes/origin/*
lfsurl = "https://..."
Run Code Online (Sandbox Code Playgroud)
或单独的
[lfs]
url = "https://..."
Run Code Online (Sandbox Code Playgroud)
如果没有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
Run Code Online (Sandbox Code Playgroud)
但你应该反对它而不是直接使用S3,因为GitHub的重定向响应可能也包含一些身份验证信息.
检查批处理响应文档以查看响应结构 - 您基本上需要解析相关部分并自己调用以检索blob(这是git lfs在结账时您将做的事情).
典型的响应(取自我引用的文档)看起来像:
{
"_links": {
"download": {
"href": "https://storage-server.com/OID",
"header": {
"Authorization": "Basic ...",
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以你可以GET https://storage-server.com/OID使用headers从批处理响应中返回的任何内容- 最后一步是重命名返回的blob(它的名称通常只是oidgit lfs使用基于校验和的存储) - 指针文件具有原始资源的名称所以只需将blob重命名为.
我终于为此制作了一个中间件:express-lfs,这里有一个演示: https: //expresslfs.herokuapp.com
您可以在那里下载 400Mo 文件作为证明。
请参阅此处的用法: https: //github.com/goodenough/express-lfs#usage
PS:感谢@fundeldman 在他的回答中提供了很好的建议;)
| 归档时间: |
|
| 查看次数: |
368 次 |
| 最近记录: |