2012-05-31 17 views
5

WinRT/C# में, मैं ऑफ़लाइन उपयोग के लिए ऑनलाइन कैटलॉग के कैशिंग का समर्थन करने के लिए स्थानीय फ़ोल्डर में एक छवि कैसे डाउनलोड करूं? क्या छवियों को सीधे डाउनलोड करने और नियंत्रण को लिंक करने के लिए उन्हें कैश से फॉलबैक के रूप में जोड़ने का कोई तरीका है?मेट्रो स्टाइल ऐप्स में स्थानीय संग्रहण में एक छवि डाउनलोड करें

var downloadedimage = await HttpWebRequest.Create(url).GetResponseAsync(); 
    StorageFile imgfile = await ApplicationData.Current.LocalFolder.CreateFileAsync(
         "localfile.png", CreationCollisionOption.FailIfExists); 

स्थानीय फ़ाइल.जेपीजी के रूप में डाउनलोड की गई दुकान को स्टोर करने के बाद मैं क्या करूँ?

उत्तर

10

HttpClient नमूना से नीचे दिए गए कोड की तरह लग रहा Windows 8 को हल करती है मुद्दा

HttpRequestMessage request = new HttpRequestMessage(
     HttpMethod.Get, resourceAddress); 
    HttpResponseMessage response = await rootPage.httpClient.SendAsync(request, 
     HttpCompletionOption.ResponseHeadersRead); 

httpclient एक HttpClient है, और उसके BaseAddress अपने संसाधन के एक सर्वर फ़ोल्डर सेट करने की आवश्यकता के लिए। हम तो यह एक छवि स्रोत के लिए कि कन्वर्ट करने के लिए (कि अगर हम क्या डाउनलोड कर रहे है)

InMemoryRandomAccessStream randomAccessStream = 
     new InMemoryRandomAccessStream(); 
    DataWriter writer = new DataWriter(randomAccessStream.GetOutputStreamAt(0)); 
    writer.WriteBytes(await response.Content.ReadAsByteArrayAsync()); 
    await writer.StoreAsync(); 
    BitmapImage image = new BitmapImage(); 
    imagecontrol.SetSource(randomAccessStream); 

कर सकते हैं या यह यह

var imageFile = await ApplicationData.Current.LocalFolder.CreateFileAsync(
     filename, CreationCollisionOption.ReplaceExisting); 
    var fs = await imageFile.OpenAsync(FileAccessMode.ReadWrite); 
    DataWriter writer = new DataWriter(fs.GetOutputStreamAt(0)); 
    writer.WriteBytes(await response.Content.ReadAsByteArrayAsync()); 
    await writer.StoreAsync(); 
    writer.DetachStream(); 
    await fs.FlushAsync(); 
0

GetResponseAsync आप एक WebResponse फ़ाइल नहीं छवि दे देंगे:

Stream imageStream = downloadedimage.GetResponseStream(); 

तो फिर तुम छवि फ़ाइल लिख सकते हैं:

byte[] imageData = new byte[imageStream.Length]; 
using(StreamReader reader = new Streamreader(imageStream)) 
{ 
    reader.ReadBytes(imageData, 0, imageData.Length); 
} 
await FileIO.WriteBytesAsync(imgfile, imageData); 
+0

हमें रीडबाइट्स को रीडर में बदलने की जरूरत है। बेसस्ट्रीम। पढ़ें, लेकिन मैं अभी तक काम नहीं कर रहा हूं, इसकी पुष्टि नहीं कर सकता - –

+0

अपडेट किया जाएगा var downloadimage = httpWebRequest.Create (url) का इंतजार करें। GetResponseAsync(); GetResponseStreamAsync() के साथ, यह काम नहीं किया - हमें क्या बदलने की ज़रूरत है? –

+0

क्या काम नहीं किया? क्या अपवाद फेंक दिया गया था? – Slugart

3

आज़माएं:

 var response = await HttpWebRequest.Create(url).GetResponseAsync(); 
     List<Byte> allBytes = new List<byte>(); 
     using (Stream imageStream = response.GetResponseStream()) 
     { 
      byte[] buffer = new byte[4000]; 
      int bytesRead = 0; 
      while ((bytesRead = await imageStream.ReadAsync(buffer, 0, 4000)) > 0) 
      { 
       allBytes.AddRange(buffer.Take(bytesRead)); 
      } 
     } 
     var file = await ApplicationData.Current.LocalFolder.CreateFileAsync(
        "localfile.png", CreationCollisionOption.FailIfExists); 
     await FileIO.WriteBytesAsync(file, allBytes.ToArray()); 
+0

धन्यवाद यह एक आसान समाधान है और यह काम करता है। मैं विंडोज 8.1 – Juan

1

आप तो एक यूआरएल द्वारा प्रतिनिधित्व की गई फ़ाइल डाउनलोड करना चाहते हैं, पृष्ठभूमिडाउनलोडर क्लास का उपयोग करने का सबसे आसान तरीका है। पृष्ठभूमि डाउनलोडर का उपयोग करने के तरीके के बारे में अधिक जानकारी के लिए this पृष्ठ देखें।

+0

के लिए मेट्रो ऐप का उपयोग करके एक नीलामी कर रहा हूं, मुझे अपने ऐप को ऑफलाइन मोड में चलाने के लिए कैशिंग मैकेनिक को कार्यान्वित करने की आवश्यकता है, कुछ भी जटिल नहीं है। यह अनावश्यक रूप से जटिल हो सकता है –

+0

यह इसका उपयोग करने का एक आसान तरीका प्रतीत होता है। धन्यवाद। –

0

करके डिफ़ॉल्ट बिटमैप छवियों फाइल करने के लिए लिखने के लिए WinRT द्वारा कैश कर रहे हैं डेवलपर द्वारा आवश्यक हस्तक्षेप के बिना।

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