【发布时间】:2013-12-10 16:48:50
【问题描述】:
我意识到以前有人问过这个问题的变体。我找到的最佳答案在
File download in Asp.Net MVC 2
但尝试遵循这些说明并没有解决我的问题。
长话短说,文件被正确检索,名称、路径和 mime 类型都正确,并且没有抛出错误。客户端的 javascript 也不会引发错误。
获取文件的 C# 代码如下所示:
[HttpPost]
public FileResult DownloadFile(int fileId)
{
... get the file and file info
return File(fileBytes, fileMimeType, fileName);
}
javascript 看起来像这样:
... set up for post here
$.post(settings.actions.downloadFile, {fileId: fileIdVar});
正如我所说,帖子返回并且没有任何反应。
我试过把post改成get,结果还是一样。
我尝试设置一个回调函数,将 document.location.href 设置为从下载返回时的某个随机 url,但这只会将我的浏览器带到我指定的页面。从我提供的链接中给出的解释来看,我无法理解,即
"...使用 document.location.href = ... 告诉浏览器转到下载文件的 url。它会看到内容处置标题并将其显示为下载而不是页面……”
我应该将浏览器指向的内容。 document.location.href 不接受数据,所以我不能单独使用它,并且使用没有 document.location.href 的 post 不会返回任何内容。
我做错了什么?
非常感谢响应者的宝贵时间!
【问题讨论】:
-
我认为问题在于 POST 是通过 AJAX 完成的。如果您发布标准帖子,您可能可以毫无问题地下载文件
-
这听起来是个好主意,Queti,但我如何在 javascript 中做到这一点?也就是说,我如何在不使用 $.post 的情况下发布,它使用 ajax?你是说我应该设置一个不同的机制,比如我的html中的一个表单?
-
是的,使用 POST 方法设置表单。如果您仍然需要在表单发送到服务器之前进行某种验证或修改数据,您仍然可以这样做,您只需使用
$(form).submit()触发表单提交。 -
再次感谢您的帮助,奎蒂。作为一个完整的问题,是否可以动态创建一个表单,让我下载一个文件,然后在我的 javascript 中提交该表单?
-
反对票有什么用?不会……政治……会吗?那太傻了。
标签: c# asp.net-mvc