2016-04-27 9 views
8

से गिट-एलएफएस फाइलों की सेवा करें मैं हेरोकू पर node.js (एक्सप्रेस) का उपयोग कर रहा हूं, जहां slug size is limited to 300MB है।एक्सप्रेस 'सार्वजनिक फ़ोल्डर

मेरा स्लग छोटा रखने के लिए, मैं अपने एक्सप्रेस 'public फ़ोल्डर को ट्रैक करने के लिए गिट-एलएफएस का उपयोग करना चाहता हूं।

इस तरह से मेरी सभी संपत्तियां (छवियां, वीडियो ...) एक एलएफएस-स्टोर (एडब्ल्यूएस एस 3 कहें) और गिट-एलएफएस पत्तियां a pointer file पर अपलोड की गई हैं (शायद इसमें एस 3 यूआरएल के साथ?)।

मैं सार्वजनिक फ़ोल्डर से फ़ाइलों की सेवा करते समय दूरस्थ 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/* फाइलें। शायद मैं एक बार पार्स किए गए यूआरएल को कैश कर सकता हूं?

उत्तर

0

मैं अंत में इस के लिए एक मध्यस्थ बनाया है।

यहाँ उपयोग देखें: https://github.com/goodenough/express-lfs#usage

पुनश्च: धन्यवाद his answer में अच्छा सलाह के लिए @fundeldman करने के लिए;)

10

असल pointer फ़ाइल यह किसी भी यूआरएल जानकारी (के रूप में लिंक में देखा जा सकता आपके द्वारा दी गई, या here) शामिल नहीं है - यह सिर्फ ब्लॉब के लिए oid (वस्तु आईडी) जो सिर्फ अपनी sha256 है रहता है।

आप फिर भी हासिल कर सकते हैं आप oid और LFS api कि आप batch request का उपयोग कर विशिष्ट oid रों डाउनलोड करने के लिए अनुमति देता है प्रयोग करने के लिए देख रहे हैं।

आप बता सकते हैं endpoint कि .git/config से अपने धब्बे स्टोर करने के लिए है जो इस तरह के रूप में गैर-डिफ़ॉल्ट lfsurl टैग स्वीकार कर सकते हैं प्रयोग किया जाता है क्या है: यदि कोई

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

या एक अलग

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

lfsurl टैग तो आप गिटहब के एंडपॉइंट का उपयोग कर रहे हैं (जो बदले में एस 3 पर रीडायरेक्ट हो सकता है):

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 

लेकिन आपको इसके खिलाफ काम करना चाहिए और एस 3 सीधे नहीं, क्योंकि गिटहब के रीडायरेक्ट प्रतिक्रिया में शायद कुछ प्रमाणीकरण जानकारी भी होगी।

चेक batch response डॉक प्रतिक्रिया संरचना को देखने के लिए - आप मूल रूप से प्रासंगिक भागों पार्स और धब्बे को पुनः प्राप्त करने (जो क्या git lfs चेकआउट के दौरान आपकी जगह में क्या किया है होगा) अपनी खुद की कॉल करने के लिए की आवश्यकता होगी।

एक विशिष्ट प्रतिक्रिया (doc मैं संदर्भित से लिया गया) कुछ ऐसा दिखाई देगा:

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

तो तुम GEThttps://storage-server.com/OID जो कुछ भी साथ headers बैच प्रतिक्रिया से लौटाए गए हैं - अंतिम चरण का नाम बदलने के लिए किया जाएगा ब्लॉब जो लौटाया गया था (इसका नाम आम तौर पर oid होगा क्योंकि गिट एलएफएस चेकसम आधारित स्टोरेज का उपयोग करता है) - पॉइंटर फ़ाइल में मूल संसाधन का नाम होता है, इसलिए उस पर ब्लॉब का नाम बदलें।express-lfs एक डेमो यहाँ के साथ: https://expresslfs.herokuapp.com

वहाँ आप एक सबूत के रूप में एक 400Mo फ़ाइल डाउनलोड कर सकते

+0

THX @fundeldman, आपको अनुरोध के बारे में थोड़ा और अधिक विकसित कर सकता साथ ressource यूआरएल हड़पने के लिए बनाने के लिए बैच एपीआई (जिथब और प्राधिकरण के बिना)? बहुत धन्यवाद – abernier

संबंधित मुद्दे