c# 如何将 IO.Stream 保存到 MemoryStream 并保存到本地文件夹中的 PDF 文件

问题描述 投票:0回答:2

我正在调用第三方服务,该服务通过 IO.Stream 返回 pdf 文件。我需要更改为 MemoryStream,并保存为 pdf 文件。

c# pdf stream memorystream
2个回答
0
投票
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
投票

您可以执行以下操作。

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

有关 Stream.CopyTo 的更多详细信息,请访问 MSDN

© www.soinside.com 2019 - 2024. All rights reserved.