我在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>