如何在下载文件时设置文件名?

4
我正在使用MVC 4。我使用以下简单的代码动态生成Excel文件。我的托管环境是Azure。
我创建了一个根路径,然后尝试保存该Excel文件。
问题是,当我的ActionResult方法响应返回时,它会给出默认弹出窗口以打开文件,但文件名中包含GUID而不是我提供的文件名。
Excel文件生成代码:
Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
// ...
//Save
        LocalResource resource = RoleEnvironment.GetLocalResource("MyValue");
        string tempPath = resource.RootPath + "DemoFile.xls";
return tempPath;

tempPath返回的路径类似于C:\AppData\Local\dftmp\Resources\11a2435c-998c-4fe8-aa55-8bb42455b4ca\directory\DemoFile.xls

下载文件弹窗中没有将文件名作为DemoFile,而是给了一些GUID,为什么?

enter image description here

ActionResult方法代码:

public ActionResult DownloadExcel() {
    string path = ExcelGenerationCode(fileName);
        Stream s = new FileStream(path, FileMode.Open, FileAccess.Read);
        return new FileStreamResult(s, "application/vnd.ms-excel");
    }

也尝试给名称属性命名

public ActionResult DownloadExcel() {
    string path = ExcelGenerationCode(fileName);
        Stream s = new FileStream(path, FileMode.Open, FileAccess.Read);
        return new FileStreamResult(s, "application/vnd.ms-excel")
        {
            FileDownloadName = "myexcelFILE1.xls"
        };
    }

在提供文件名参数时出现以下错误。 在此输入图片描述

我有足够的空间和内存。


1
展示允许您下载文件的操作方法代码。 - CodeCaster
2
在您的编辑之后,这是适当的重复问题:您无法为FileStreamResult设置文件名,请使用File(Stream, String, String)重载。但是您不必手动实例化流,File(String, String, String)在内部执行相同的操作,因此您将使用更少的代码。 - CodeCaster
1
我更新了我的回答。现在它能用了吗? - Vajda Endre
1
请尝试搜索错误。请参阅如何修复“Microsoft Excel无法打开或保存更多文档” - CodeCaster
1
在运行此代码之前,您是否在任务管理器中结束了所有Excel实例? - CodeCaster
显示剩余4条评论
1个回答

13
您应该返回一个新的FileContentResult,您的操作必须返回FileResult而不是ActionResult,例如:

public virtual FileResult DownloadFile(long fileId)
{
     string path = ExcelGenerationCode(fileName);
     return File(path, "application/vnd.ms-excel","donwload.xls");
}

我在上面的问题中更新了我的ActionResult代码,请检查。 - Neo
1
“你的操作必须是FileResult” - 不正确,FileResult继承自ActionResult,因此后者也可以使用。 - CodeCaster
工作得很好,但在打开时出现以下错误: “Microsoft Excel 无法打开或保存更多文档,因为可用内存不足。” :/ - Neo
1
问题是我已经在路径变量中传递了文件名,为什么它还是没有使用我的文件名:/ - Neo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接