从ASP.NET Core 2控制器返回PDF
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了从ASP.NET Core 2控制器返回PDF,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1633字,纯文字阅读大概需要3分钟。
内容图文
![从ASP.NET Core 2控制器返回PDF](/upload/InfoBanner/zyjiaocheng/686/bf46e8899cf548858e4f43a3e8650e55.jpg)
我试图从我的ASP.NET Core 2控制器返回PDF文件.
我有这个代码
(主要是从此SO question借来的):
var net = new System.Net.WebClient();
//a random pdf file link
var fileLocation = "https://syntera.io/documents/T&C.pdf";/
var data = net.DownloadData(fileLocation);
MemoryStream content = null;
try
{
content = new MemoryStream(data);
return new FileStreamResult(content, "Application/octet-stream");
}
finally
{
content?.Dispose();
}
上面的代码是我的控制器调用的服务类的一部分.这是我控制器的代码.
public async Task<IActionResult> DownloadFile(string fileName)
{
var result = await _downloader.DownloadFileAsync(fileName);
return result;
}
但是我一直在获取ObjectDisposedException:无法访问封闭的Stream.
try and finally块是从另一个SO问题修复它的尝试.
主要问题是:A)这是将PDF文件发送回浏览器的正确方法吗?B)如果不是,我如何更改代码以将pdf发送给浏览器?
理想情况下,我不想先将文件保存在服务器上,然后将其返回给控制器.我宁愿在保留所有内容的同时返回它.
解决方法:
final将始终被调用(即使在返回之后也是如此),因此它将始终在将内容流发送给客户端之前就将其丢弃,从而导致错误.
Ideally , I don’t want to first save the file on the server and then return it to the controller. I’d rather return it while keeping everything in memory.
使用FileContentResult类获取原始字节数组数据并直接将其返回.
FileContentResult: Represents an
ActionResult
that when executed will write a binary file to the response.
async Task<IActionResult> DownloadFileAsync(string fileName){
using(var net = new System.Net.WebClient()) {
byte[] data = await net.DownloadDataTaskAsync(fileName);
return new FileContentResult(data, "application/pdf") {
FileDownloadName = "file_name_here.pdf"
};
}
}
无需额外的内存流
内容总结
以上是互联网集市为您收集整理的从ASP.NET Core 2控制器返回PDF全部内容,希望文章能够帮你解决从ASP.NET Core 2控制器返回PDF所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。