1

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

[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。无法预览的文件会立即以相同的约定下载。

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

4

1 回答 1

0

试试这两种解决方法:

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");           
 }

启动.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>
于 2020-12-07T21:56:07.000 回答