Как загрузить файл в память из POST-запроса Web API? - PullRequest
0 голосов
/ 28 апреля 2019

Я понимаю, что есть много подобных вопросов, но ни один из ответов не помог мне.Мне нужно отправить данные в маршрут веб-API, который отображает шаблон, преобразует его в PDF и возвращает файл для загрузки, не сохраняя его на сервере.Этот метод работает при чтении ранее сохраненного файла и выполнении GET, но когда я пытаюсь сохранить поток в памяти из POST, я просто получаю то, что представляется пустым объектом ReadableStream.

Маршрут API:

        [AllowAnonymous]
        [HttpPost]
        public HttpResponseMessage Stream([FromBody]Resume res)
        {
            var resumeHtml = ResumeTemplate(res);

            var Renderer = new HtmlToPdf();
            var PDF = Renderer.RenderHtmlAsPdf(resumeHtml);
            var stream = PDF.Stream;

            var result = new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content = new StreamContent(stream)
            };
            result.Content.Headers.ContentDisposition =
                new ContentDispositionHeaderValue("attachment")
                {
                    FileName = "WORK.pdf"
                };
           result.Content.Headers.ContentType =
               new MediaTypeHeaderValue("application/octet-stream");

            return result;
        }

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

Мой запрос на выборку:

 fetch("/DesktopModules/Resume/API/Resume/Save", {
        method: "POST",
        headers: {
          "Content-Type": "application/json"
        },
        body: JSON.stringify(data)
      })
      .then(response => {
          console.log(response);
          response.blob();
        })
        .then(blob => {
          var downloadURL = window.URL.createObjectURL(blob);
          window.open(downloadURL);
        })
        .catch(error => console.log(error));
...