2011-01-28 8 views
5

मैंने वेब पेज से सामग्री प्राप्त करने और सिस्टम में सहेजने के लिए निम्नलिखित कोड लिखा है। यदि वेबपृष्ठ HTML प्रारूप में है तो मैं इसे सहेजने में सक्षम हूं। यदि वेब पेज पीडीएफ प्रारूप में है तो मैं इसे सहेजने में असमर्थ हूं। सहेजने के बाद यदि मैं फ़ाइल का खुलासा करता हूं तो रिक्त पृष्ठ आ रहे हैं।पीडीएफ फाइलों को कैसे सहेजने के लिए http प्रतिक्रिया का उपयोग कर

मैं जानना चाहता हूं कि प्रतिक्रिया से पीडीएफ फाइलों को कैसे सहेजना है।

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(Url); 
WebResponse response = request.GetResponse(); 
Stream stream = response.GetResponseStream(); 
StreamReader reader = new StreamReader(stream); 
webContent = reader.ReadToEnd(); 
StreamWriter sw = new StreamWriter(FileName); 
sw.WriteLine(webContent); 
sw.Close(); 

कृपया मुझे ASAP मदद करें।

उत्तर

13

StreamReader.ReadToEnd() एक स्ट्रिंग देता है। पीडीएफ फाइलें बाइनरी हैं, और इसमें डेटा है जो स्ट्रिंग-फ्रेंडली नहीं है। आपको इसे बाइट सरणी में पढ़ने की जरूरत है, और बाइट सरणी को डिस्क पर लिखना होगा। इससे भी बेहतर, एक छोटे बाइट सरणी को बफर के रूप में उपयोग करें और छोटे हिस्सों में पढ़ें।

आप, साथ ही webclient का उपयोग करके पूरी बात को आसान बनाने में कर सकते हैं:

using (var wc = new System.Net.WebClient()) 
{ 
    wc.DownloadFile(Url, FileName); 
} 
+0

पीडीएफ फाइलों _usually_ द्विआधारी, कर रहे हैं वे कर रहे हैं नहीं? चूंकि यह [पोस्टस्क्रिप्ट] पर आधारित है (http://en.wikipedia.org/wiki/Portable_Document_Format#PostScript) यह केवल पाठ हो सकता है, मुझे लगता है। –

+0

धन्यवाद जोएल इसके कामकाज ठीक है। – Vishnu

+0

शानदार विधि। :) एक साल के बाद +1। –

6
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(Url); 
WebResponse response = request.GetResponse(); 

using (Stream stream = response.GetResponseStream()) 
using (FileStream fs = new FileStream(FileName, FileMode.Create, FileAccess.Write, FileShare.None)) 
{ 
    stream.BlockCopy(fs); 
} 

... 
public static class StreamHelper 
{ 
    public static void Copy(Stream source, Stream target, int blockSize) 
    { 
     int read; 
     byte[] buffer = new byte[blockSize]; 
     while ((read = source.Read(buffer, 0, blockSize)) > 0) 
     { 
      target.Write(buffer, 0, read); 
     } 
    } 
    public static void BlockCopy(this Stream source, Stream target, int blockSize = 65536) 
    { 
     Copy(source, target, blockSize); 
    } 
} 
संबंधित मुद्दे