C# 如何在Asp.net核心MVC浏览器上下载PDF文件
我使用以下代码下载pdf格式的SSRS报告:C# 如何在Asp.net核心MVC浏览器上下载PDF文件,c#,asp.net-core,asp.net-core-mvc,C#,Asp.net Core,Asp.net Core Mvc,我使用以下代码下载pdf格式的SSRS报告: string URL = "http://ssrs-test.com/ReportS/?/UAT_FOLDER"; URL = URL + "&SRNo=122&rs:Command=Render&rs:Format=pdf"; System.Net.HttpWebRequest Req = (System.Net.HttpWebRequest) System.Net.WebRequest.Create(URL);
string URL = "http://ssrs-test.com/ReportS/?/UAT_FOLDER";
URL = URL + "&SRNo=122&rs:Command=Render&rs:Format=pdf";
System.Net.HttpWebRequest Req = (System.Net.HttpWebRequest) System.Net.WebRequest.Create(URL);
Req.Method = "GET";
string path = @ "E:\New folder\Test.pdf";
System.Net.WebResponse objResponse = Req.GetResponse();
System.IO.FileStream fs = new System.IO.FileStream(path, System.IO.FileMode.Create);
System.IO.Stream stream = objResponse.GetResponseStream();
byte[] buf = new byte[1024];
int len = stream.Read(buf, 0, 1024);
while (len > 0) {
fs.Write(buf, 0, len);
len = stream.Read(buf, 0, 1024);
}
stream.Close();
fs.Close();
它完美地在指定路径E:\New folder\中创建了一个pdf文件,我尝试做的是:
我需要在浏览器上下载它,就像我们在asp.net中使用Response.Write和Response.End等所做的那样
我可以在ASP.Net内核中执行同样的操作吗
我所说:
我将pdf复制到解决方案中,并将“复制到输出目录”属性更改为“复制” index.cshtml,可在浏览器选项卡中打开pdf:
@{
ViewData["Title"] = "Home Page";
}
<a href="/home/get">Open PDF</a>
首先,您需要确保已将文件上载到项目中 下面是一个关于如何在Asp.Net Core浏览器上下载pdf的简单演示: 1.意见:
<a asp-action="GetPdf" asp-controller="Users">Download</a>
3.Startup.cs:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
//...
app.UseStaticFiles();
//...
}
4.结果:
您可以下载一个三向文件
public async Task<IActionResult> Get()
{
var path = Path.Combine(
Directory.GetCurrentDirectory(), "wwwroot\\images\\4.pdf");
var memory = new MemoryStream();
using (var stream = new FileStream(path, FileMode.Open))
{
await stream.CopyToAsync(memory);
}
memory.Position = 0;
return File(memory, "application/pdf", "Demo.pdf");
}
HTML
如果要在浏览器中显示PDF,而不是提示将其保存到磁盘上,则服务器端代码需要指定一个内容配置:内联标题。例如,.@AlwaysLearning尝试过这个:但在Chrome上什么都没有发生。你在使用什么样的asp.net核心项目?剃须刀页面?mvc?@Harry Its mvc..我使用的是AspNet Core,让我试试这是AspNet Core我不知道为什么但不工作我会像Ajax那样调用get方法,这会有所不同吗?使用Ajax,响应会在javascript的http响应中返回。您需要使用javascript来解析响应并手动进行下载。像这样的东西实际上可能链接不好。我只是很快就找到了。也许看看这一点,在项目中不存储pdf文件是否可行?只有确保文件存在于服务器上,您才能找到文件路径并下载。是否可以使用Stream完成?这意味着不需要存储文件,尽管它是通过流完成的,但它也需要存在于服务器上。
@{
ViewData["Title"] = "Home Page";
}
<a href="/home/get" download>Download PDF</a>
public class HomeController : Controller
{
public IActionResult Get()
{
var stream = new FileStream(@"example.pdf", FileMode.Open);
return new FileStreamResult(stream, "application/pdf");
}
}
<a asp-action="GetPdf" asp-controller="Users">Download</a>
[HttpGet]
public ActionResult GetPdf()
{
string filePath = "~/file/test.pdf";
Response.Headers.Add("Content-Disposition", "inline; filename=test.pdf");
return File(filePath, "application/pdf");
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
//...
app.UseStaticFiles();
//...
}
public async Task<IActionResult> Get()
{
var path = Path.Combine(
Directory.GetCurrentDirectory(), "wwwroot\\images\\4.pdf");
var memory = new MemoryStream();
using (var stream = new FileStream(path, FileMode.Open))
{
await stream.CopyToAsync(memory);
}
memory.Position = 0;
return File(memory, "application/pdf", "Demo.pdf");
}
<form asp-controller="pdf" asp-action="Get" method="get">
<button type="submit">Download</button>
</form>