我目前正在尝试实现一个控制器,您可以从中下载文件(更具体地说是jar文件)。这些文件存储在磁盘上而不是数据库中。到目前为止,我已经想出了这个:
public FilePathResult GetFile(String fileName)
{
return File(Path.Combine(Server.MapPath("~/App_Data/Bundles"), fileName), "application/java-archive");
}
此时不要错误地处理错误处理等问题。文件确实以这种方式下载,但它的名称错误。而不是,例如,“sample.jar”文件获取控制器的名称,“GetFile”,(没有扩展名)。
关于我做错的任何想法?
答案 0 :(得分:8)
使用重载,您可以指定fileDownloadName
。
return File(Path.Combine(Server.MapPath("~/App_Data/Bundles"), fileName),
"application/java-archive",
fileName);
答案 1 :(得分:2)
如果它们只是存储在磁盘上而你没有做任何事情而不仅仅是为它们服务,为什么要使用控制器来路由它们呢?您应该将它们放在~/Content/Bundles
中,例如直接链接到它们。
然后您不必担心filename
参数上的所有额外错误/安全处理。通常,直接从App_Data
提供文件也是一种不好的做法,因为通常这是不应共享的文件的位置。
答案 2 :(得分:1)
File
有一个重载版本,我的意思是你必须添加一个带文件名的第三个参数。
return File(Path.Combine(Server.MapPath("~/App_Data/Bundles"), fileName),
"application/java-archive", "putFileNamehere.extension");
现在,putFileNamehere.extension
将在文件下载对话框中显示给用户。
答案 3 :(得分:1)
查看此链接,它就像使用MVC 3的文件下载选项的魅力一样