1

我有一个显示 PDF/Word/Excel 文件的 Asp.NET 站点,但我想隐藏文件的位置,即如果用户通过链接请求文件而不是显示路径,只需打开文件名,我已经在其他网站上看到了一些其他帖子,但由于它们很旧,所以它们不会炒锅。

任何帮助表示赞赏。

谢谢

4

2 回答 2

2

使用ASP.NET ASHX 处理程序

一些 ASP.NET 文件是动态生成的。它们是使用 C# 代码或磁盘资源生成的。这些文件不需要 Web 表单。相反,ASHX 通用处理程序是理想的。它可以从查询字符串动态返回图像、写入 XML 或任何其他数据。

于 2012-11-15T13:36:01.433 回答
1

解决这个问题的一种方法是编写一个自定义的 .ashx 处理程序,它实现了 IHttpHandler。

实现 ProcessRequest(..) 方法,并在响应中通过管道输出文件(这是我不久前编写的应用程序的一个示例:

 Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest

        Dim inline As Boolean = Boolean.Parse(context.Request.QueryString("Inline"))
        Dim fileName As String = context.Request.QueryString("fileName")
        If (fileName.Contains("\")) Then Throw New Exception(String.Format("Invalid filename {0}.  Looks like a path was attempted", fileName))


        Dim filePath = ConfigurationManager.AppSettings("FileDirectory") + "\" + fileName
        With context.Response
            .Buffer = True
            .Clear()

            If inline Then
                .AddHeader("content-disposition", "inline; ; filename=" & IO.Path.GetFileName(filePath))
            Else
                .AddHeader("content-disposition", "attachment; ; filename=" & IO.Path.GetFileName(filePath))
            End If

            .WriteFile(filePath)

            If fileName.ToUpper.EndsWith(".PDF") Then
                .ContentType = "application/pdf"
            ElseIf fileName.EndsWith(".htm") Or fileName.EndsWith(".html") Then
                .ContentType = "text/html"
            ElseIf fileName.EndsWith(".tif") Then
                .ContentType = "image/tiff"
            ElseIf fileName.EndsWith(".jpeg") Or fileName.EndsWith(".jpg") Then
                .ContentType = "image/jpeg"
            End If

            .End()
        End With
于 2012-11-15T13:33:51.653 回答