我的桌面上有一个文件供测试。我试图在一个看起来像这样的视图中显示它:
@{
ViewBag.Title = "ShowFile";
}
<h2>ShowFile</h2>
我用于控制器的代码是:
[HttpGet]
public ActionResult ShowFile(string path)
{
path = @"C:\Documents and Settings\nickla\Desktop\nlamarca_06_15.pdf";
return File(path, "application/pdf", "nlamarca_06_15.pdf");
}
当我运行此代码时,视图会显示“未定义”有关此处可能出错的任何想法吗?
答案 0 :(得分:4)
您似乎没有在路径中指定文件名:
public ActionResult ShowFile(string filename)
{
var path = @"C:\Documents and Settings\nickla\Desktop";
var file = Path.Combine(path, filename);
file = Path.GetFullPath(file);
if (!file.StartsWith(path))
{
// someone tried to be smart and sent
// ?filename=..\..\creditcard.pdf as parameter
throw new HttpException(403, "Forbidden");
}
return File(file, "application/pdf");
}
答案 1 :(得分:1)
您缺少路径中的文件名。你的路径只到目录。提供完整的PDF文件名。
public ActionResult ShowFile(string path)
{
//not sure why you overwrote although you have a parameter to pass the path
path = @"C:\Documents and Settings\nickla\Desktop\nlamarca_06_15.pdf";
return File(path, "application/pdf", "nlamarca_06_15.pdf");
}
假设您在该特定目录中的PDF文件名为nlamarca_06_15.pdf
答案 2 :(得分:0)
尼克,
在第一眼看来是一个路径问题(没有文件名,只有路径),请尝试:
[HttpGet]
public ActionResult ShowFile(string path)
{
path = @"C:\Documents and Settings\nickla\Desktop\nlamarca_06_15.pdf";
return File(path, "application/pdf", "pdf_download_name.pdf");
}
最终参数纯粹是您希望下载的文件被命名的名称,因为它命中了&#39;用户本地驱动器。
[编辑] 我看到您已更新了您的问题,这使目前为止的所有建议无效。我能看到的唯一补充是你可能没有处理path参数的路由设置。这个问题可能是一个不断变化的目标:)