如何从Web API POST请求下载内存中的文件?

时间:2019-04-27 23:44:31

标签: c# reactjs asp.net-web-api fetch memorystream

我意识到有很多类似的问题,但是没有一个答案可以满足我的特定需求。我需要将数据发布到Web 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));

0 个答案:

没有答案