我为DocX文件编写了一个自定义httphandler,我正试图通过iframe显示这些文件。
这是我的控制器:
public ActionResult LoadDOC(string path)
{
var fsSource = new FileStream(path, FileMode.Open, FileAccess.Read);
return new FileStreamResult(fsSource, "application/vnd.openxmlformats-officedocument.wordprocessingml.document")
{
FileDownloadName = "newfile.docx"
};
}
}
需要更改文件名,以便httphandler可以获取它。这些文件驻留在没有扩展名的文件服务器上(它们被重命名为guid)。 例如:
"\\\\fileservername\\Documents\\811943a3-56f7-42cb-8450-1b8319a426b4\\633d9f3e-df99-408e-b59c-ec8efa4fa41f"
我无法更改文件驻留在服务器上的方式,我必须通过代码添加扩展名。
当在iframe中执行上述操作时,会立即下载该文件。然而,PDF文件和文本文件正确呈现。
这是自定义的httphandler:
<add name="DOCXhandler" path="*.docx" verb="GET" type="MyProject.Handlers.DocxHandler, MyProject" preCondition="integratedMode" />
如何使用此方法更改文件流扩展名,或者使用其他方法来实现iframe中显示的文件所需的结果?
是否可以按内容类型更改处理程序?
编辑:问题清晰;
答案 0 :(得分:0)
考虑将“.docx”扩展名添加到文件的呈现Url,而不是删除LoadDoc
行动(即廉价黑客 - path = path.Replace(".docx", "")
,更喜欢使用Path
类中的方法来执行此操作操纵)。
附注:从安全角度来看,暴露服务器端文件路径通常是个坏主意。
答案 1 :(得分:0)
我实际上很难解决这个问题。
我改变了控制器将iframe设置为实际虚拟文件路径的方式: 例如:“localhost / Project / 12345_6789.docx”,其中12345是组标识符,6789是文档标识符。
我制作的httphandler需要这些,并将文件路径更改为: “//// fileserverpath / documentspath /6789分之12345”
我不再直接通过控制器传输文件,而是通过我的请求处理程序。
希望这有助于那里的人!