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