2012-10-24 16 views
5

मेरे पास एक ऐसा एप्लिकेशन है जो उपयोगकर्ताओं को फ़ोटो अपलोड करने की अनुमति देता है, जो Azure Blob संग्रहण में संग्रहीत हैं। उपयोगकर्ता में इन तस्वीरों को देखने की क्षमता भी है। उन्हें देखने के लिए, हम चाहते हैं कि एप्लिकेशन डिफ़ॉल्ट डाउनलोड स्थान पर छवि डाउनलोड करे। फिलहाल, अपलोड सही काम करता है। लेकिन Azure API के लिए जो डाउनलोड फ़ंक्शन मैंने पाया वह कुछ भी नहीं कर रहा है। साथ ही, मैं वास्तव में एक डाउनलोड स्थान निर्दिष्ट नहीं कर सकता क्योंकि इस कार्यक्षमता को डेस्कटॉप/लैपटॉप के साथ-साथ उन मोबाइल उपकरणों पर काम करने की आवश्यकता है जिनमें अलग-अलग डिफ़ॉल्ट निर्देशिकाएं हैं।Azure Blob संग्रहण से फ़ाइल डाउनलोड करें

ऐसा लगता है कि यह आसान होना चाहिए लेकिन मुझे मेरी मदद करने के लिए कुछ भी नहीं मिला।

CloudBlobContainer container = blobClient.GetContainerReference("photos"); 
CloudBlob blob = container.GetBlobReference(photo.BlobUrl); 
//copy blob from cloud to local gallery 
blob.DownloadToFile(photo.ImageName); 

blob.DownloadToFile(photo.ImageName); एक सर्वर अनुरोध का कारण बनता है, लेकिन कुछ भी नहीं होता है उर्फ ​​कोई फाइल डाउनलोड किया जाता है:

यहाँ मेरी कोड का एक नमूना है।

+1

'फोटो' ऑब्जेक्ट के लिए कोई संदर्भ नहीं है? –

उत्तर

5

किसी भी कारण है कि आप ग्राहक ब्लॉब भंडारण से फ़ाइल सीधे डाउनलोड करने और निर्मित ब्राउज़र क्षमता यह बचाने के लिए उपयोग नहीं हो सकता? अगर फाइलें निजी हैं, तो एसएएस हस्ताक्षर उत्पन्न करना बहुत आसान है। यह आपके सर्वर के माध्यम से आने से डाउनलोड को ऑफ़लोड करेगा और उस ओवरहेड को हटा देगा।

+2

आप यह कैसे करते हैं? – Demodave

3

मुझे आश्चर्य है कि आप इस कोड से क्या उम्मीद करते हैं, लेकिन विशेष रूप से विभिन्न प्लेटफॉर्म के मामले में यह काम नहीं करेगा। मेरा सुझाव है कि आप इसके बजाय DownloadToStream विधि का उपयोग करें। फिर आप तय कर सकते हैं कि स्ट्रीम के साथ क्या करना है। उदाहरण के लिए उपयोगकर्ता से पूछें कि वह फ़ाइल को सहेजना चाहता है।

+0

लिंक मर चुका है कृपया – Eric

+0

अपडेट करें - विशेष रूप से @Eric के लिए! – astaykov

3
यहाँ

:

blob.DownloadToFile(photo.ImageName); 

आप जहां फ़ाइल और नाम आप इसे होना चाहते हैं बचाने के लिए यह बताने की आवश्यकता:

blob.DownloadToFile("C:\mycutepuppy.jpg"); 

आप आंकड़ा करने के लिए System.Environment.SpecialFolder enum इस्तेमाल कर सकते हैं मौजूदा सिस्टम के आधार पर फ़ोल्डर को बाहर निकालें, फिर उस छवि को संलग्न करें जिसे आप छवि का नाम होना चाहते हैं;

var imgPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), + photo.ImageName); 

blob.DownloadToFile(imgPath); 

यह सही पथ जहां उपयोगकर्ता के डेस्कटॉप निर्देशिका है करने के लिए छवि को बचाने होगा:

यहाँ एक अधिक पूर्ण उदाहरण है। विशेष फ़ोल्डरों के लिए उस enum पर प्रलेखन यहां दिया गया है।

http://msdn.microsoft.com/en-us/library/system.environment.specialfolder.aspx

+0

यदि मैं उपयोगकर्ता को पथ का चयन करना चाहता हूं तो क्या होगा? –

+0

फिर आप अपने पथ के सामने अपना रास्ता प्रीपेड करेंगे जैसे: string userPath = "जो भी उन्होंने उठाया"; तो यह var imgPath = userPath + photo.ImgName होगा; आप यह जांचना चाहेंगे कि वहां सहेजने का प्रयास करने से पहले निर्देशिका भी मौजूद है। – ElvisLives

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