2016-04-27 17 views
8

Tôi đang sử dụng node.js (express) trên Heroku, tại đây slug size is limited to 300MB.Cung cấp các tệp git-lfs từ thư mục công khai '

Để giữ sên nhỏ của tôi, tôi muốn sử dụng git-lfs để theo dõi thư mục 'public' thể hiện của tôi.

Theo cách đó, tất cả nội dung của tôi (hình ảnh, video ...) được tải lên cửa hàng lfs (nói AWS S3) và git-lfs rời khỏi a pointer file (có thể là URL S3 trong đó?).

Tôi muốn chuyển hướng nhanh đến tệp S3 từ xa khi cung cấp tệp từ thư mục công khai.

Vấn đề của tôi là tôi không Kwon cách lấy URL từ nội dung các tập tin con trỏ của ...

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); 
    }); 
}); 

Đừng có nghĩ rằng nó sẽ không quá tốn kém để làm cho rõ ràng đọc và phân tích có khả năng tất cả các tệp public/*. Có lẽ tôi có thể cache URL khi được phân tích cú pháp?

Trả lời

10

Trên thực tế các tập tin pointer không chứa bất kỳ thông tin url trong nó (như có thể thấy trong liên kết mà bạn cung cấp, hoặc here) - nó chỉ giữ (ID Object) oid cho blob mà chỉ là sha256 của nó.

Bạn tuy nhiên có thể đạt được những gì bạn đang tìm kiếm bằng cách sử dụng oid và tiệm api cho phép bạn tải cụ thể oid s sử dụng batch request.

Bạn có thể nói với các thiết bị đầu cuối mà được sử dụng để lưu trữ các đốm màu của bạn từ .git/config mà có thể chấp nhận không mặc định lfsurl thẻ như là những gì:

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

hoặc riêng

[lfs] 
    url = "https://..." 

Nếu không có Thẻ lfsurl sau đó bạn đang sử dụng điểm cuối của GitHub (có thể chuyển hướng đến 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 

Nhưng bạn nên làm việc với nó chứ không phải S3 trực tiếp, vì phản hồi chuyển hướng của GitHub có lẽ cũng sẽ chứa một số thông tin xác thực.

Kiểm tra cấu trúc phản hồi - về cơ bản bạn cần phải phân tích các phần có liên quan và thực hiện cuộc gọi của riêng bạn để truy xuất các đốm màu (đó là những gì git lfs sẽ thực hiện thay cho bạn khi thanh toán).

Một phản ứng điển hình (lấy từ doc Tôi tham chiếu) sẽ giống như thế:

{ 
    "_links": { 
    "download": { 
     "href": "https://storage-server.com/OID", 
     "header": { 
     "Authorization": "Basic ...", 
     } 
    } 
    } 
} 

Vì vậy, bạn sẽ GEThttps://storage-server.com/OID với bất cứ điều gì headers được trả về từ câu trả lời hàng loạt - bước cuối cùng sẽ được đổi tên blob đã được trả lại (tên thường sẽ chỉ là oid vì git lfs sử dụng bộ nhớ dựa trên tổng kiểm tra) - tệp con trỏ có tên tài nguyên ban đầu nên chỉ cần đổi tên blob thành đó.

+0

thx @fundeldman, bạn có thể phát triển thêm một chút thông tin về yêu cầu để đảm để lấy URL ressource với API lô (không có github và ủy quyền)? cảm ơn nhiều – abernier

Các vấn đề liên quan