2013-08-20 4 views
6

से Google क्लाउड स्टोरेज फ़ाइल प्राप्त करें मैंने एक Google ऐप इंजन एप्लिकेशन लिखा है जो प्रोग्रामेटिक रूप से जेनरेट किए गए डेटा को सहेजने के लिए ब्लॉबस्टोर का उपयोग करता है। ऐसा करने के लिए, मैंने Files API का उपयोग किया, जिसे दुर्भाग्यवश Google क्लाउड स्टोरेज के पक्ष में बहिष्कृत कर दिया गया है। तो मैं जीसीएस के साथ काम करने के लिए अपने सहायक वर्ग को फिर से लिख रहा हूं।अपनी ब्लॉबकी

मैं जितना संभव हो सके इंटरफ़ेस को जितना संभव था उतना ही रखना चाहता हूं, क्योंकि मैं फ़ाइलों के संदर्भ रखने के लिए डेटास्टोर में ब्लॉबकेज़ को जारी रखता हूं (और उत्पादन अनुप्रयोग का मॉडल बदलना हमेशा दर्दनाक होता है)। जब मैं GCS के लिए कुछ बचाने के लिए, मैं

BlobKey blobKey = blobstoreService.createGsBlobKey("/gs/" + fileName.getBucketName() + "/" + fileName.getObjectName()); 
here निर्धारित

के साथ एक BlobKey पुनः प्राप्त है, और मैं डेटास्टोर में यह लागू हैं।

तो यहां सवाल है: प्रलेखन मुझे बताता है कि एक जीएससी फ़ाइल को blobstoreService.serve(blobKey, resp); के साथ सर्वलेट प्रतिक्रिया में कैसे सेवा दी जाए, लेकिन मैं अपने कोड में फ़ाइल सामग्री (इनपुट इनपुट, बाइट सरणी या जो कुछ भी) के रूप में इसे पुनर्प्राप्त करने के लिए कैसे प्राप्त कर सकता हूं आगे की प्रक्रिया? मेरे वर्तमान कार्यान्वयन में मैं FileReadChannelAppEngineFile (दोनों बहिष्कृत) से पढ़ रहा हूं।

उत्तर

3

इनपुट स्ट्रीम के रूप में Google संग्रहण ऑब्जेक्ट खोलने के लिए कोड यहां दिया गया है। दुर्भाग्य से, आप बाल्टी नाम और वस्तु नाम और ब्लॉब कुंजी

GcsFilename gcs_filename = new GcsFilename(bucket_name, object_name); 
GcsService service = GcsServiceFactory.createGcsService(); 
ReadableByteChannel rbc = service.openReadChannel(gcs_filename, 0); 
InputStream stream = Channels.newInputStream(rbc); 
+0

धन्यवाद! मैं BlobKey का उपयोग कर सामग्री प्राप्त करने की उम्मीद कर रहा था, लेकिन अगर ऐसा करने का कोई तरीका नहीं है तो मैं ऑब्जेक्ट नाम शामिल करने के लिए अपने मॉडल को दोबारा कर दूंगा –

0

नहीं उपयोग करने के लिए आप केवल अपलोड हैंडलर (fileInfo.gs_object_name) में cloudstorage फ़ाइल नाम हो जाते हैं और अपने डेटाबेस में संग्रहीत कर सकते हैं। उसके बाद यह खो जाता है और ऐसा लगता है कि यह BlobInfo या अन्य मेटाडेटा संरचनाओं में संरक्षित नहीं है।

गूगल का कहना है: BlobInfo मेटाडाटा FileInfo मेटाडाटा के विपरीत डेटासंग्रह को कायम नहीं कर रहा है। (कोई ब्लॉब कुंजी नहीं है, लेकिन create_gs_key को कॉल करके यदि आप आवश्यक हो तो बना सकते हैं।) आपको अपने अपलोड हैंडलर में gs_object_name स्वयं को सहेजना होगा या यह डेटा खो जाएगा।

क्षमा करें, यह एक अजगर लिंक है, लेकिन जावा में ऐसा कुछ ढूंढना आसान होना चाहिए। https://developers.google.com/appengine/docs/python/blobstore/fileinfoclass

3

को देखते हुए एक blobKey, BlobstoreInputStream वर्ग Blobstore से मूल्य को पढ़ने के लिए, में वर्णित के रूप में उपयोग documentation:

BlobstoreInputStream in = new BlobstoreInputStream(blobKey); 
0

यहाँ Blobstore दृष्टिकोण है (क्षमा करें, इस अजगर के लिए है, लेकिन मैं कर रहा हूँ सुनिश्चित करें कि आपको जावा के लिए यह काफी समान लगता है):

blob_reader = blobstore.BlobReader(blob_key) 
if blob_reader: 
    file_content = blob_reader.read() 
संबंधित मुद्दे