从控制器MVC核心设置下载文件名的问题



我尝试从服务器本地文件夹获取文件并下载到客户端。但当我尝试下载时(下载操作也成功了(,下载文件的名称会自动设置为操作名称。如何更改下载的文件名?

MyController:

[HttpGet]
public PhysicalFileResult MYACTIONDOWNLOAD(string filePathAndName)
{
string downloadPath = Path.Combine(Directory.GetCurrentDirectory(), @"C:", filePathAndName);
string filesMimeType = MimeTypesMap.GetMimeType(filePathAndName);
return new PhysicalFileResult(downloadPath, filesMimeType); 
}

客户端(查看脚本(:

<a target="_blank" href="(my website www root url)/MYPROJECTNAME/MYCONTROLLERNAME/MYACTIONDOWNLOAD?filePathAndName=\192.168.X.XMYREMOTEDISC-1MYDOCUMENTSSCHOOL10012021_1023350.docx"></a>

当我点击下载操作是可以的,但下载的文件名是MYACTIONDOWNLOAD.docx我想更改文件名。

您可以按照以下方式更改代码:

return new PhysicalFileResult(downloadPath, filesMimeType) { FileDownloadName = "Test.doc"};

您可以尝试此方法。

[HttpGet]
public async Task<IActionResult> Download(string path)
{
var memory = new MemoryStream();
string webRootPath = _HostEnvironment.WebRootPath; 
var uploads = Path.Combine(webRootPath + path);
using (var stream = new FileStream(uploads, FileMode.Open))
{
await stream.CopyToAsync(memory);
}
memory.Position = 0;
var ext = Path.GetExtension(uploads).ToLowerInvariant();
return File(memory, "application/octet-stream", "any file name");
}

_HostEnvironment.WebRootPath将提供服务器的绝对路径。如果它来自你的URL,那么你可以避免这种情况。

路径使用的Instaed

var bytes = File.ReadAllBytes("your path" )

然后

return File(bytes, mimetype,"name you want" );

最新更新