如何在ASP.NET Core而不强制下载文件



我在ASP中定义了以下REST端点。NET Core 3.1应用程序:

[HttpGet("files/{id}")]
[ProducesResponseType(typeof(FileContentResult), StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public ActionResult GetFile(int id)
{
// ...
return File(stream, mime);
}

如果我保持代码原样,则文件会立即下载或在浏览器中预览,具体取决于浏览器是否可以预览文件(即pdf文件(。然而,当用户去下载该文件时,该文件的名称是id;例如,保存pdf会建议保存701.pdf。无法预览的文件会按照相同的约定立即下载。

我可以提供下载的FileNamereturn File(stream, mime, friendlyName),但即使是可以预览的文件(即pdf文件(也会立即下载。有没有一种方法可以在不强制下载文件的情况下提供友好的名称?

尝试以下两种解决方法:

1(

视图:

<a asp-action="GetFile" asp-controller="Users">Download</a>

控制器(确保文件已存在于wwwroot/file文件夹中(:

[HttpGet]
public ActionResult GetFile()
{
string filePath = "~/file/test.pdf";
Response.Headers.Add("Content-Disposition", "inline; filename=test.pdf");
return File(filePath, "application/pdf");           
}

Startup.cs:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
//...
app.UseStaticFiles();
//...
}
public async Task<IActionResult> GetFile()
{
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="GetFile" method="get">
<button type="submit">Download</button>
</form>

相关内容

  • 没有找到相关文章

最新更新