首页 文章

仅当用户请求在ASP.NET MVC中保存文件时,如何提供fileDownloadName?

提问于
浏览
1

我有一个控制器动作,返回像这样的FileResult

return this.File("file.pdf", "application/pdf");

对于URL“/ Download / 322” - 其中322是文件的id .

这非常有用,因此,如果用户点击PDF链接 - 只要他们安装了PDF插件,它就会在他们的网络浏览器中打开 .

但是,如果他们右键单击该链接并选择“另存为...”,该怎么办?浏览器弹出文件名为“322” . 我想在这一点上有一个更好的文件名,做这样的事情:

return this.File("file.pdf", "application/pdf", "file.pdf");

但是,如果我将控制器更改为返回,那么它将始终弹出下载框,因为MVC正在将Content-Disposition标头设置为附件(因此我无法嵌入文件) .

总之,我可以以某种方式检测到用户正在尝试下载文件,而文件只是嵌入在页面上的某些内容中吗?

3 回答

  • 0

    您无法确定如何配置浏览器来处理文档/内容 .

    例如,可以右键单击HTML文档中的链接,然后选择“将链接另存为”/“将目标另存为”并下载该文件 . 该链接可能指向另一个HTML文档 . 绝对没有办法确定是否发生了这种情况 .

    唯一直接的方法是将响应的“内容处置”指定为具有适当值的参数“filename”的“附件” .

    您的HTML响应应包含以下标头:

    Content-Type: whatever/be-it
    Content-Disposition: attachment; filename=FilenameToSaveAs.Ext
    

    例:

    Content-Type: text/html
    Content-Disposition: attachment; filename=mypage.html
    

    如果浏览器理解这些 Headers - 现在大多数 Headers 都是这样,它们将打开“打开/保存/取消”对话框 .

    它类似于“下载附件”Gmail中的图像,否则将在浏览器中显示 .

  • 3

    发布另一个答案... coz格式在评论中不起作用 .

    我想到了一个想法......使用JavaScript .

    为了强制下载:

    <a href='downloadFile.ext'
       onclick="alert('This file cannot be shown, right click, select Save Target As to download');
        return false'>
      Text for link</a>
    

    查看或下载:

    <a href="simpleFile.ext">Text for Link</a>
    

    在第二种情况下,用户可以默认点击并让浏览器处理,也可以右键单击并保存!

  • 1

    好吧,经过一番思考后,我决定每次只提供文件名 . 唯一的缺点是它将被标记为附件,因此不会在浏览器中加载(相反,用户将下载该文件) .

    另外,我真的不认为你可以做我上面提到的问题......所以除非有人有任何其他想法......我会接受这个答案 .

相关问题