Как сохранить файл из HTML2PDFRocket в папку на сервере - PullRequest
0 голосов
/ 11 июня 2019

Мое веб-приложение Azure вызывает html2pdfrocket с этим кодом:

 MemoryStream stream = new MemoryStream(result.Content.ReadAsByteArrayAsync().Result);
 System.IO.File.WriteAllText(path, stream.ToString());

Но я получаю неверный PDF размером всего в несколько байтов. Я знаю, что URL, который я передаю html2pdfrocket, действителен, потому что я могу вставить его на их веб-сайт, чтобы протестировать. Нужно ли выполнять асинхронизацию / ожидание или что-то еще, чтобы получить все данные, прежде чем пытаться сохранить их в папке?

1 Ответ

1 голос
/ 11 июня 2019

Нет необходимости использовать async / await, .Result делает то же самое, что и await.

Аналогичная ошибка в вашем коде, stream.ToString() только конвертирует сам объект потока в строку, но несодержать содержимое.

Я предлагаю вам использовать массив байтов [] вместо потока (я проверил с потоком, но сохраненный файл .pdf пуст, даже если длина содержимого правильная).

Попробуйте использовать массив byte [], как показано ниже, и он работает на моей стороне:

            using (var client = new HttpClient())
            {
                var content = new FormUrlEncodedContent(new[]
                {
                    new KeyValuePair<string, string>("apikey","xxxxx"),
                    new KeyValuePair<string, string>("value", "the url")
                });

                var result = client.PostAsync("http://api.html2pdfrocket.com/pdf", content).Result;

                if (result.IsSuccessStatusCode)
                {                    
                    // change the path as per your need
                    System.IO.File.WriteAllBytes(@"d:\temp\0618.pdf", result.Content.ReadAsByteArrayAsync().Result);
                }
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...