我有一个奇怪的问题。我正在制作一个C#MVC应用程序,该应用程序生成PDF并提供带有下载按钮的下载。
public ActionResult Download()
{
string url = (string)TempData["url"];
byte[] thePdf = System.IO.File.ReadAllBytes(url);
return File(thePdf, "application/pdf");
}
突然之间,我无法使用byte[]
或File.ReadAllBytes()
(或任何其他流)将PDF文件正确转换为MemoryStream
。
当我使用MemoryStream
时,在InvalidOperationException
和ReadTimeOut
上都得到了WriteTimeOut
。
我在一个新的C#MVC项目中实现了上述代码,一切正常。因此问题必须出在我正在从事的项目中。
答案 0 :(得分:1)
如果您的网址是远程网址,则应使用WebClient
下载如下数据。
我试图重现您的代码,并且有效。
public ActionResult Download()
{
string url = (string)TempData["url"];
url = "http://www.iuh.edu.vn/Tuyensinh/QC/TomTatQuyCheThiTHPT2018.pdf";
using (var client = new WebClient())
{
// read data
byte[] thePdf = client.DownloadData(url);
return File(thePdf, "application/pdf");
}
//byte[] thePdf = System.IO.File.ReadAllBytes(url);
//return File(thePdf, "application/pdf");
}
在cshtml中:
<input type="button" value="Download" onclick="window.location.href='/YourController/Download'" />