单击“打开Word文档”会尝试在下载时重新连接到Controller操作

时间:2012-03-07 20:55:23

标签: asp.net-mvc-3 download

我需要从服务器下载文件,但如果可能,请打开内联。我现在正在做;

Response.AddHeader("Content-Disposition", string.Format("inline; filename={0}", documentFileName));
result = new FileStreamResult(new FileStream(documentFilePath, FileMode.Open), "application/msword");

我现在已将application / msword放在那里,因为这就是我遇到的问题。当我单击单词文档上的“打开”时,就好像文档会多次调用该操作,但是没有会话而没有数据库,因此它崩溃了。当用户运行它时,他们看到一个长时间挂起,“下载”对话框最终出现在单词中,他们必须取消它。该文件存在且有效,但这是不可取的。

Pdfs,pngs等下载很好。任何人都可以解释这种行为,并给我一些关于如何修复它的提示吗?

更新

行动基本上是这样的;

[HttpPost]
public FileResult View(int id, int source) 
{
  var document = GetDocumentFromDatabase(id, source);

  documentFilePath = Path.Combine( documentsDirectory, document.Name);
  documentName = document.Name; 

Response.AddHeader("Content-Disposition", string.Format("inline; filename={0}", documentFileName));
result = new FileStreamResult(new FileStream(documentFilePath, FileMode.Open), "application/msword");

return result;
}

我已经把它缩减了,因为我无法分享细节,但完整的想法就在那里。

答案:

我查找了可用的内容类型,在那里我已经定义了文件是内联还是附件,当我检测到word文档时,我将其设置为附件。没有更多的错误。 PDF仍在浏览器中打开,因为我将其设置为内联。

1 个答案:

答案 0 :(得分:1)

我用:

 public ActionResult GetAttachment(int id)
        {

            var attachment = _repository.GetAttachByID(id);
            if (attachment != null)
            {
                Response.AppendHeader("Content-Disposition",string.Format("inline; filename={0}",attachment.FileName));
                return File(attachment.File, attachment.MimeType, attachment.FileName);
            }
            else
            {
                return null;
            }                       
        }

此致