अपलोड और डाउनलोड
किसी भी आकार की फ़ाइलें Arkvory में भागों में जाती हैं, और जो ट्रांसफ़र रुक जाए उसे वहीं से जारी रखा जा सकता है। यह पेज दिखाता है कि कंसोल में, arkvoryctl के साथ, SDK के साथ और HTTP API के साथ यह कैसे होता है।
एक अपलोड को upload.create, upload.read, upload.write और upload.complete कार्रवाइयाँ चाहिए। समूहों के संदर्भ में, उसे लिखने का एक्सेस चाहिए। एक डाउनलोड को content.read चाहिए। अनुमतियाँ देखें।
फ़ाइल अपलोड करें
हर अपलोड वही चरण करता है। क्लाइंट पूरी फ़ाइल का SHA-256 निकालता है और फ़ाइल नाम, आकार और चेकसम के साथ एक अपलोड सत्र शुरू करता है। वह फ़ाइल को भागों में भेजता है। जब सभी भाग आ जाते हैं, तो सर्वर उन्हें जोड़ता है, चेकसम जाँचता है और फ़ाइल को एक अपरिवर्तनीय आर्टिफ़ैक्ट के रूप में प्रकाशित करता है।
कंसोल में
- साइडबार में अपलोड चुनें, या टॉप बार में फ़ाइल अपलोड करें।
- अपलोड करने के लिए फ़ाइल के अंतर्गत फ़ाइल चुनें। कंसोल उसका चेकसम निकालने के लिए पूरी फ़ाइल एक बार पढ़ता है (फ़ाइल की अखंडता जाँची जा रही है…)। दसियों गीगाबाइट की फ़ाइल के लिए, पहला बाइट भेजे जाने से पहले इसमें कुछ समय लगता है।
- अपलोड करें / जारी रखें चुनें। ट्रांसफ़र की स्थिति के नीचे की पट्टी प्रगति दिखाती है।
- जब फ़ाइल प्रकाशित हो जाए, तो उसका ID दिखाया जाता है। उसे देखने के लिए आर्टिफ़ैक्ट खोलें।
रोकें ट्रांसफ़र रोकता है और जो भाग आ चुके हैं उन्हें रखता है। अपलोड के दौरान पेज छोड़ने से पहले ब्राउज़र आपको चेतावनी देता है। कंसोल फ़ाइल के साथ कोई लेबल या मेटाडेटा नहीं भेजता। उन्हें बाद में आर्टिफ़ैक्ट का विवरण में जोड़ें; पथ वाली फ़ाइलें देखें।
arkvoryctl के साथ
arkvoryctl upload ./Build/Game.zip --label test
arkvoryctl upload ./Build/Game.zip --file metadata.json --state ./job-state/game.json
arkvoryctl uploads status 3b0c0b8e-6a4e-4f5f-9d3b-5a6c1c9b0f11
arkvoryctl uploads cancel 3b0c0b8e-6a4e-4f5f-9d3b-5a6c1c9b0f11upload प्रकाशित होने पर आर्टिफ़ैक्ट प्रिंट करता है। --label एक लेबल जोड़ता है। --file labels और metadata वाली JSON फ़ाइल की ओर इशारा करता है, और उसे प्राथमिकता मिलती है। किसी पथ के अंतर्गत फ़ाइल रखने के लिए put इस्तेमाल करें; UPack प्रकाशित करने के लिए packages publish। कमांड लाइन देखें।
SDK के साथ
const session = await releases.uploads.create(idempotencyKey, {
name: 'Game.zip',
size: String(file.size),
sha256,
labels: ['test'],
metadata: { commit: 'abc123' },
});
const artifact = await releases.uploads.resume(session.id, file, {
onProgress: (bytes) => console.log(bytes),
});resume वे भाग भेजता है जो सर्वर के पास नहीं हैं और अपलोड पूरा करता है। पूरा उदाहरण, Node.js में हैशिंग के साथ, TypeScript SDK में है।
HTTP API के साथ
curl -X POST "$ARKVORY/api/v1/repositories/releases/uploads" \
-H "Authorization: Bearer $ARKVORY_KEY" -H "Idempotency-Key: game-1234" \
-H "Content-Type: application/json" \
-d '{"name":"Game.zip","size":"73400320","sha256":"<64 hex digits>"}'
curl "$ARKVORY/api/v1/repositories/releases/uploads/$ID/parts" -H "Authorization: Bearer $ARKVORY_KEY"
curl -X PUT "$ARKVORY/api/v1/repositories/releases/uploads/$ID/parts/0" \
-H "Authorization: Bearer $ARKVORY_KEY" -H "Content-Type: application/octet-stream" \
-H "X-Content-SHA256: <64 hex digits of this part>" --data-binary @part-0.bin
curl -X POST "$ARKVORY/api/v1/repositories/releases/uploads/$ID/complete" \
-H "Authorization: Bearer $ARKVORY_KEY"आकार एक दशमलव स्ट्रिंग है। Idempotency-Key 1 से 128 अक्षर, अंक, ., _, : या - होता है। पहली कॉल के उत्तर में अपलोड id और expiresAt होते हैं। दूसरी कॉल भाग का आकार partBytes और जो भाग पहले से संग्रहीत हैं उन्हें लौटाती है। अंतिम को छोड़कर हर भाग का आकार ठीक वही होता है। ऑपरेशन हैं createUpload, listUploadParts, putUploadPart और completeUpload (अपलोड)।
छोटी फ़ाइल के लिए आप दो सरल तरीके इस्तेमाल कर सकते हैं। PUT /uploads/{id}/content पूरी फ़ाइल एक ही अनुरोध में भेजता है। PUT /raw/<path> सत्र बनाता है, बाइट भेजता है और उन्हें एक ही अनुरोध में पथ पर संग्रहीत करता है, जैसा curl -T करता है। दोनों अनुरोध 30 मिनट के भीतर पूरे होने चाहिए। बड़ी या धीमी चीज़ों के लिए भाग इस्तेमाल करें। रॉ फ़ाइलें देखें। खाली फ़ाइल एक ही अनुरोध में जाती है।
फ़ाइल कितनी बड़ी हो सकती है
| सीमा | मान |
|---|---|
| भाग का आकार | लगभग 78 GiB तक की फ़ाइलों के लिए 8 MiB। बड़ी फ़ाइलें 16, 32, 64 MiB इत्यादि इस्तेमाल करती हैं, 1 GiB तक, ताकि किसी फ़ाइल को कभी 10 000 से अधिक भाग न चाहिए। |
| प्रति अपलोड भाग | 10 000 (इंडेक्स 0 से 9999) |
| सबसे बड़ी फ़ाइल | 1 GiB के 10 000 भाग, लगभग 10 TiB |
| निचली सीमा | व्यवस्थापक ARKVORY_MAX_OBJECT_BYTES से एक सेट कर सकता है |
| फ़ाइल नाम | 1 से 240 वर्ण, कोई /, \ या कंट्रोल कैरेक्टर नहीं |
सर्वर अपलोड बनने पर भाग का आकार चुनता है और पूरे अपलोड के लिए उसे रखता है। GET /api/v1/capabilities maxObjectBytes, partBytes, maxPartBytes और maxParts दिखाता है। कंसोल सर्वर सीमा से ऊपर की फ़ाइल को शुरू होने से पहले अस्वीकार कर देता है।
क्लाइंट हैश करते और भेजते समय एक भाग को मेमोरी में रखता है। 78 GiB से बड़ी फ़ाइलों के लिए भाग, और इसलिए मेमोरी, 1 GiB तक बढ़ जाती है।
सर्वर पर मुक्त डिस्क स्थान को कुछ समय के लिए भाग और जोड़ी गई फ़ाइल दोनों रखने चाहिए। अगर डिस्क भरी हो, तो सर्वर अपलोड को 507 storage_full के साथ अस्वीकार कर देता है।
अपलोड जारी रखें
एक अपलोड सत्र विफलता के बाद भी अपने भाग रखता है। जारी रखने के लिए, क्लाइंट को वही फ़ाइल और वही सत्र दें।
कंसोल। खुले टैब के भीतर, रोकें के बाद अपलोड करें / जारी रखें दोबारा चुनें। टैब बंद करने के बाद, अपलोड ID रखें। अपलोड जारी रखें का विस्तार करें: जब तक अपलोड चलता है तब तक अपलोड ID फ़ील्ड ID दिखाती है। बाद में, वही फ़ाइल चुनें, वहाँ ID दर्ज करें और अपलोड करें / जारी रखें चुनें। कंसोल भागों की तुलना आपकी फ़ाइल से करता है। अगर फ़ाइल भिन्न है, तो यह रुक जाता है और आपको बताता है। नया अपलोड दोनों फ़ील्ड साफ़ करता है और नया अपलोड शुरू करता है।
फ़ील्ड दोहराव से सुरक्षा की कुंजी वापस जाने का दूसरा तरीका है। कंसोल इसे स्वयं भर देता है। वही कुंजी और वही फ़ाइल दूसरे के बजाय वही सत्र लौटाती है।
arkvoryctl। वही विकल्पों के साथ वही कमांड चलाएँ। क्लाइंट ने पहले अनुरोध से पहले स्रोत फ़ाइल के पास एक चेकपॉइंट <file>.arkvory-upload.json, या --state में दी गई फ़ाइल सहेजी थी। वही बाइट को नए आर्टिफ़ैक्ट के रूप में प्रकाशित करने के लिए, नई --state इस्तेमाल करें। CI में रीट्राई के बीच स्रोत फ़ाइल और state फ़ोल्डर रखें। फ़ाइल, सर्वर, रिपॉज़िटरी या विकल्पों में बदलाव checkpoint_mismatch (एग्ज़िट कोड 6) देता है।
SDK। सहेजे गए सत्र ID और वही फ़ाइल के साथ resume दोबारा कॉल करें। जब create का उत्तर भी खो गया हो तो उबरने के लिए, वही आइडेम्पोटेंसी कुंजी और वही डिस्क्रिप्टर लेकर create कॉल करें: यह वही सत्र लौटाता है।
HTTP। listUploadParts से संग्रहीत भाग पढ़ें, फिर गुम इंडेक्स भेजें। किसी भाग को वही बाइट के साथ दोबारा भेजना सुरक्षित है। किसी संग्रहीत इंडेक्स के लिए अन्य बाइट 409 upload_state के साथ अस्वीकार कर दी जाती हैं।
क्लाइंट नेटवर्क विफलता के बाद या 408, 429, 502, 503 और 504 के बाद स्वयं भी एक अनुरोध दोहराते हैं: एक ऑपरेशन के लिए अधिकतम 20 बार, ऐसे विराम के साथ जो 0.5 से 60 सेकंड तक बढ़ता है और Retry-After का सम्मान करता है। arkvoryctl में धीमे लिंक के लिए --retries और --attempt-timeout विकल्प हैं।
किसी अपलोड को केवल वही खाता या कुंजी जारी रख सकती है जिसने उसे बनाया। किसी और के लिए यह अस्तित्व में नहीं है। किसी सेवा कुंजी को रोटेट करने पर खाता वही रहता है, इसलिए नई कुंजी अपलोड जारी रखती है।
चेकसम
- अपलोड से पहले। कंसोल, CLI और SDK फ़ाइल का SHA-256 निकालते हैं और उसे सत्र में भेजते हैं।
- प्रत्येक भाग। हेडर
X-Content-SHA256में भाग का चेकसम होता है। जिस भाग की बाइट मेल न खाए वह422 integrity_mismatchके साथ अस्वीकार कर दिया जाता है और संग्रहीत नहीं होता। - अंत में। सर्वर प्रकाशित करने से पहले जोड़ी गई फ़ाइल का आकार और SHA-256 सत्र से जाँचता है। बेमेल होने पर
422 integrity_mismatch; CLI एग्ज़िट कोड 5 के साथ बाहर निकलता है। आर्टिफ़ैक्ट दिखाई नहीं देता। - डाउनलोड। कंसोल, CLI और SDK फ़ाइल सौंपने से पहले पूरी फ़ाइल का SHA-256 जाँचते हैं। अंतिम फ़ाइल जाँच पास होने के बाद ही दिखती है।
किसी फ़ाइल का ETag उसका चेकसम है: "sha256:<64 hex digits>"। आर्टिफ़ैक्ट विवरण SHA-256 दिखाते हैं और कॉपी करें उसे कॉपी करता है।
कंप्लीशन जॉब
बड़ी फ़ाइल जोड़ने में समय लगता है। 16 GiB से कम की फ़ाइलों के लिए, completeUpload उन्हें अनुरोध के भीतर जोड़ता है, जिसमें अधिकतम 30 मिनट लग सकते हैं। 16 GiB से, SDK, और इसलिए कंसोल और CLI, वर्कर से इसे पूरा करने को कहते हैं: enqueueCompletion एक जॉब के साथ 202 लौटाता है, और क्लाइंट getCompletionJob को तब तक पोल करता है जब तक स्थिति completed या failed न हो जाए। विफल जॉब में एक त्रुटि कोड होता है, उदाहरण के लिए integrity_mismatch।
जॉब के लिए वर्कर सेवा चलनी चाहिए। यह एक जॉब को अधिकतम 5 बार आज़माती है, बढ़ते विराम के साथ, और उन त्रुटियों पर तुरंत हार मान लेती है जिन्हें रीट्राई ठीक नहीं कर सकता। दोहराया गया enqueueCompletion वही जॉब लौटाता है। अगर सर्वर रीस्टार्ट हो जाए, तो जॉब जारी रहता है। आपको अपलोड दोबारा शुरू नहीं करना पड़ता।
अपलोड समाप्ति
अधूरा अपलोड सत्र बनने के 7 दिन बाद समाप्त हो जाता है। समय expiresAt में होता है, बढ़ाया नहीं जाता, और भाग भेजने पर नहीं हिलता। उसके बाद, भाग और complete 409 upload_expired के साथ अस्वीकार कर दिए जाते हैं। नया अपलोड शुरू करें। प्रकाशित फ़ाइलें कभी समाप्त नहीं होतीं।
सर्वर समाप्त सत्र और उनके भाग पृष्ठभूमि में हटा देता है। किसी को पहले छोड़ने के लिए, arkvoryctl uploads cancel ID या cancelUpload इस्तेमाल करें। रद्द करना रोकना नहीं है: भाग त्याग दिए जाते हैं।
फ़ाइल डाउनलोड करें
कंसोल में
आर्टिफ़ैक्ट में किसी फ़ाइल के बगल में, या आर्टिफ़ैक्ट विवरण में डाउनलोड करें चुनें। ब्राउज़र पूछता है कि फ़ाइल कहाँ सहेजनी है। फ़ाइल डाउनलोड में कतार में जाती है। कतार डेटा को एक अस्थायी प्रति में लिखती है, SHA-256 जाँचती है, और तभी लक्ष्य फ़ाइल बदलती है।
कतार को HTTPS पर या स्थानीय कंप्यूटर पर Chrome या Edge चाहिए, क्योंकि यह ब्राउज़र की फ़ाइल सिस्टम एक्सेस के ज़रिए बड़ी फ़ाइल लिखती है। अन्य ब्राउज़रों को CLI या SDK इस्तेमाल करना चाहिए।
डाउनलोड की स्थितियाँ हैं प्रतीक्षा में, डाउनलोड हो रहा है, फिर से प्रयास हो रहा है, रुका हुआ, सत्यापित फ़ाइल सहेजी जा रही है…, सत्यापित और सहेजा गया, विफल और रद्द किया गया। बटन हैं:
| बटन | प्रभाव |
|---|---|
| जारी रखें / फिर से प्रयास करें | रुके या विफल डाउनलोड को सहेजे गए भाग से जारी रखें |
| रद्द करें | एक डाउनलोड रद्द करें और उसकी अस्थायी प्रति हटाएँ |
| सभी रोकें / कतार जारी रखें | पूरी कतार को रोकें और छोड़ें |
| प्रतीक्षारत रद्द करें | प्रतीक्षा करने वाले डाउनलोड रद्द करें |
| सभी रद्द करें | सभी डाउनलोड रद्द करें |
| पूरे हुए हटाएँ | जगह बनाने के लिए पूरी हुई पंक्तियाँ हटाएँ (कतार 64 रखती है) |
| कतार पुनर्स्थापित करें | पेज रीलोड के बाद, अधूरे डाउनलोड वापस लाएँ |
कतार सेटिंग्स में एक साथ डाउनलोड (1 से 8, डिफ़ॉल्ट 2), शुरुआत का अंतराल, ms (0 से 60 000 ms, डिफ़ॉल्ट 250) और कतार में प्रतीक्षा की सीमा, सेकंड (1 से 1800 सेकंड, डिफ़ॉल्ट 300) हैं। उन्हें इस्तेमाल करने के लिए सीमाएँ लागू करें चुनें। वे सर्वर की सीमाएँ नहीं बढ़ाते।
रीलोड या बंद टैब के बाद, उसी सर्वर में उसी खाते के रूप में दोबारा साइन इन करें, डाउनलोड खोलें और कतार पुनर्स्थापित करें चुनें। बहाल किए गए डाउनलोड रोके हुए प्रतीक्षा करते हैं। प्रत्येक पर जारी रखें / फिर से प्रयास करें चुनें और लक्ष्य फ़ाइल दोबारा चुनें। ब्राउज़र को अस्थायी प्रति के लिए मुक्त स्थान चाहिए।
arkvoryctl के साथ
arkvoryctl download 3b0c0b8e-6a4e-4f5f-9d3b-5a6c1c9b0f11 ./Game.zip
arkvoryctl get builds/game/1.4/Game.zip ./Game.zip
arkvoryctl packages download app ./app.upack --range ^1.4 --stage releaseजब तक डाउनलोड चलता है, <output>.arkvory-part और <output>.arkvory-download.json लक्ष्य के पास रहते हैं। रुकावट के बाद वही कमांड दोबारा चलाएँ। अंतिम फ़ाइल SHA-256 जाँच के बाद ही दिखती है। मौजूदा लक्ष्य कभी अधिलेखित नहीं किया जाता (destination_exists, एग्ज़िट कोड 6)।
HTTP के साथ: रेंज और ETag
downloadArtifact किसी आर्टिफ़ैक्ट की बाइट लौटाता है। HEAD केवल हेडर लौटाता है।
curl -fL -H "Authorization: Bearer $ARKVORY_KEY" -C - -o Game.zip \
"$ARKVORY/api/v1/repositories/releases/artifacts/$ID/content"Accept-Ranges: bytes. एक रेंज के लिएRange: bytes=1048576-,bytes=0-1023याbytes=-500भेजें। उत्तर206होता है,Content-Rangeके साथ। एक साथ कई रेंज समर्थित नहीं हैं: सर्वर पूरी फ़ाइल भेजता है। अंत से आगे की शुरुआत416देती है।ETag"sha256:<hex>"होता है। उसके साथIf-None-Match304देता है। उसके साथIf-Rangeएक रेंज तभी जारी रखता है जब फ़ाइल अभी भी वही हो; अन्यथा पूरी फ़ाइल आती है।curl -C -एक डाउनलोड जारी रखता है। नाम-आधारित पते हर अनुरोध पर निर्धारित होते हैं, उदाहरण के लिएpackages/content?name=app&range=^1.4, इसलिए दो कॉलों के बीच फ़ाइल बदल सकती है। उन्हें सुरक्षित रूप से जारी रखने के लिए, जो ETag आपको मिला उसेIf-Rangeमें भेजें, या पहले नाम निर्धारित करें और आर्टिफ़ैक्ट ID से डाउनलोड करें।
SDK सामग्री को 8 MiB रेंज में पढ़ता है और हर एक को जाँचता है। TypeScript SDK देखें।
बिना कुंजी वाले लोगों के लिए लिंक
एक डाउनलोड लिंक किसी को बिना किसी कुंजी के एक फ़ाइल लाने देता है: किसी परीक्षक, ग्राहक, या ऐसी बिल्ड मशीन को जिसके पास कोई क्रेडेंशियल नहीं है। लिंक केवल उसी आर्टिफ़ैक्ट को खोलता है, GET और HEAD के लिए, समाप्त होने तक। यह curl -C - और रेंज के साथ काम करता है।
कंसोल में, आर्टिफ़ैक्ट को आर्टिफ़ैक्ट का विवरण में खोलें और डाउनलोड लिंक चुनें। कंसोल लिंक को कॉपी करता है और उसे उसकी समाप्ति के साथ दिखाता है। लिंक एक घंटे तक चलता है। बटन तभी दिखता है जब आप फ़ाइल डाउनलोड कर सकते हैं।
arkvoryctl link 3b0c0b8e-6a4e-4f5f-9d3b-5a6c1c9b0f11 --ttl 900curl -X POST "$ARKVORY/api/v1/repositories/releases/artifacts/$ID/links" \
-H "Authorization: Bearer $ARKVORY_KEY" -H "Content-Type: application/json" \
-d '{"ttlSeconds":900}'आयु 60 सेकंड से 24 घंटे (86 400 सेकंड) तक होती है और डिफ़ॉल्ट रूप से एक घंटा। उत्तर में dtl_ से शुरू होने वाला एक token, एक url और expiresAt होते हैं। CLI और SDK एक पूरा URL प्रिंट करते हैं। API पथ लौटाता है, जिसे आप सर्वर पते में जोड़ते हैं।
लिंक एक सीक्रेट है। जिसके पास वह है वह फ़ाइल डाउनलोड कर सकता है। आप किसी लिंक को समाप्त होने से पहले निरस्त नहीं कर सकते, इसलिए उसे छोटा रखें। URL को कुंजी की तरह मानें: उसे चैट रूम और सार्वजनिक लॉग से दूर रखें। प्रॉक्सी लॉग और ब्राउज़र इतिहास उसे दर्ज कर सकते हैं। डाउनलोड लिंक देखें।
सीमाएँ और कतारें
व्यवस्थापक तय करता है कि सर्वर एक साथ कितने ट्रांसफ़र चलाता है और कितनी तेज़ी से। डिफ़ॉल्ट रूप से एक सर्वर एक साथ 2 अपलोड और 16 डाउनलोड चलाता है, और एक खाता 1 अपलोड और 4 डाउनलोड। अधिक वाले 20 सेकंड तक कतार में प्रतीक्षा करते हैं। अगर कतार भरी हो या प्रतीक्षा समाप्त हो जाए, तो सर्वर Retry-After के साथ 503 लौटाता है, और क्लाइंट प्रतीक्षा करके पुनः प्रयास करते हैं। बाइट-प्रति-सेकंड बजट, जब सेट हो, ट्रांसफ़र धीमे करता है लेकिन उन्हें रोकता नहीं। उपयोगकर्ता इन बजटों को देख या बदल नहीं सकते। मान एनवायरनमेंट वेरिएबल में हैं।
त्रुटियाँ
| उत्तर | कारण | क्या करें |
|---|---|---|
409 upload_expired | सत्र 7 दिन से पुराना है | नया अपलोड शुरू करें |
409 upload_state | अपलोड पहले ही प्रकाशित या रद्द है, या किसी संग्रहीत भाग में अन्य बाइट हैं | नया अपलोड शुरू करें, या जाँचें कि आप वही फ़ाइल इस्तेमाल करते हैं |
409 parts_incomplete | कुछ भाग नहीं आए | अपलोड जारी रखें |
409 part_mismatch | भाग नियोजित भाग आकार या इंडेक्स से मेल नहीं खाते | listUploadParts से भाग का आकार लें और जारी रखें |
409 idempotency_mismatch | कुंजी किसी अन्य फ़ाइल के लिए इस्तेमाल हुई थी | नई कुंजी इस्तेमाल करें |
422 integrity_mismatch | कोई चेकसम मेल नहीं खाता | मूल फ़ाइल दोबारा भेजें |
507 storage_quota | रिपॉज़िटरी कोटा खत्म हो गया है | पुराने बिल्ड हटाएँ या बड़ा कोटा माँगें |
507 storage_full | सर्वर डिस्क भरी है | व्यवस्थापक को कॉल करें |
Retry-After के साथ 503 | सर्वर व्यस्त है | प्रतीक्षा करें, क्लाइंट स्वयं पुनः प्रयास करते हैं |
पूरी सूची त्रुटियाँ में है।
संबंधित पेज
- कमांड लाइन (arkvoryctl) और TypeScript SDK
- पथ वाली फ़ाइलें और पैकेज
- API संदर्भ: अपलोड, डाउनलोड लिंक, आर्टिफ़ैक्ट