Как сохранить IO.Stream в MemoryStream и сохранить в файл PDF в локальной папке - PullRequest
0 голосов
/ 13 декабря 2018

Я звоню в стороннюю службу, которая возвращает файл PDF от IO.Stream.Мне нужно перейти на MemoryStream и сохранить в файл PDF.

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018
cRequestString = ".....";//You need to set up you own URL here.  
            //Make the API call  
            try  
            {  
    byte[] bHeaderBytes = System.Text.Encoding.UTF8.GetBytes(GetUserPasswordString()); //user and pa for third party call.  
                    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(cRequestString);  
                request.Method = WebRequestMethods.Http.Get;  
                request.PreAuthenticate = true;  
                request.ContentType = "application/pdf";  
                request.Accept = "application/pdf";  
                request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(bHeaderBytes));  
                MemoryStream memStream;   
                WebResponse response = request.GetResponse();                 
                using (Stream stream = response.GetResponseStream())                   
                using (StreamReader reader = new StreamReader(stream))  
                {  
                    memStream = new MemoryStream();  
                    //read small blocks to show correctly  
                    byte[] buffer = new Byte[1023];  
                    int byteCount;  
                    do  
                    {  
                        byteCount = stream.Read(buffer, 0, buffer.Length);  
                        memStream.Write(buffer, 0, byteCount);  
                    } while (byteCount > 0);  
                }  
                memStream.Seek(0, SeekOrigin.Begin);//set position to beginning    
                return memStream;    
            }  
            catch  
            {  
                return null;  
            }  

//save MemoryStream to local pdf file  
 private void SavePDFFile(string cReportName, MemoryStream  pdfStream)  
        {  
            //Check file exists, delete  
            if (File.Exists(cReportName))  
            {  
                File.Delete(cReportName);  
            }  
            using (FileStream file = new FileStream(cReportName, FileMode.Create, FileAccess.Write))  
            {  
                byte[] bytes = new byte[pdfStream.Length];  
                pdfStream.Read(bytes, 0, (int)pdfStream.Length);  
                file.Write(bytes, 0, bytes.Length);  
                pdfStream.Close();  
            }  
        }  
0 голосов
/ 13 декабря 2018

Вы можете сделать следующее.

using (Stream stream = response.GetResponseStream()) 
using(MemoryStream memStream = new MemoryStream())
{
  memStream = new MemoryStream();
  stream.CopyTo(memoryStream);
  // TODO : Rest of your task
}

Подробнее о Stream.CopyTo на MSDN

...