Как кодировать двоичный PDF из HttpResponse? - PullRequest
2 голосов
/ 03 апреля 2019

Я получаю двоичный PDF-файл от HttpResponse, но не могу получить его в правильном формате

  var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
      using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
      {
          var result = streamReader.ReadToEnd();

          if (!string.IsNullOrEmpty(result))
          {
              byte[] byteArray = Encoding.UTF8.GetBytes(result);
              File.WriteAllBytes(Environment.CurrentDirectory + @"\label.pdf", byteArray);
          }


      }

Ответы [ 2 ]

3 голосов
/ 03 апреля 2019

PDF - это байты, а не текст - похоже, что вы извлекаете PDF из http-запроса, и в этом случае вы не хотите использовать StreamReader, string или Encoding здесь - вы просто хотите сырые байты. Вы, вероятно, можете просто использовать httpResponse.GetResponseStream().CopyTo(someOtherStream), где someOtherStream - это FileStream для местоположения, т.е.

using (var target = File.Create(path))
using (var source = httpResponse.GetResponseStream())
{
    source.CopyTo(target);
}
2 голосов
/ 03 апреля 2019

Не используйте StreamReader.StreamReader - для преобразования потока байтов в поток символов.Однако PDF-файлы являются двоичными файлами, и вам не следует превращать их в текст.

Просто скопируйте загружаемые вами байты непосредственно в файл, не превращая их в символы:

using (var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse())
using (var responseStream = httpResponse.GetResponseStream())
using (var fileStream = File.Create(Path.Combine(Environment.CurrentDirectory, "label.pdf")))
{
    responseStream.CopyTo(fileStream);
}
...