从快递公共文件夹服务git-lfs文件
我在Heroku上使用node.js(express),其中slug size is limited to 300MB。从快递公共文件夹服务git-lfs文件
为了让我的slu small变小,我想用git-lfs来跟踪我的快递'public
文件夹。
这样,我的所有资产(图片,视频......)都上传到一个lfs-store(比如AWS S3),git-lfs离开a pointer file(可能包含S3 URL)。
我想在从公用文件夹提供文件时将重定向转发到远程S3文件。
我的问题是我不权如何检索指针文件的内容的网址...
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分析一次?
,我终于做了这个中间件:express-lfs在这里演示:https://expresslfs.herokuapp.com
在那里,你可以下载一个400Mo文件作为证据。
见用法这里:https://github.com/goodenough/express-lfs#usage
PS:感谢@fundeldman好的建议在his answer)
其实pointer
文件不包含任何URL信息(如可以在链接中可以看出你提供,或here) - 它只是不断BLOB的oid
(对象ID),这仅仅是它的sha256
。
但是,您可以实现你在找什么用oid
并允许您使用batch request下载特定oid
S上的LFS api。
你可以告诉什么是所使用你的斑点从.git/config
存储可以接受非默认lfsurl
标记,如终点:
[remote "origin"]
url = https://...
fetch = +refs/heads/*:refs/remotes/origin/*
lfsurl = "https://..."
或单独
[lfs]
url = "https://..."
如果没有lfsurl
tag然后你使用的是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: [email protected]: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 ...",
}
}
}
}
所以,你会用什么headers
从批量应答返回GET
https://storage-server.com/OID
- 最后一步将是重命名返回的blob(它的名字通常只是oid
,因为git lfs使用基于校验码的存储) - 指针文件具有原始资源的名称,因此只需将blob重命名为该名称即可。
THX @fundeldman,你可以开发更多的有关要求做出抢用的ressource网址批处理API(没有github和授权)?非常感谢 – abernier