Asp.Net隐藏文件的URL

时间:2012-11-15 13:28:40

标签: asp.net

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

感谢任何帮助。

由于

2 个答案:

答案 0 :(得分:2)

使用ASP.NET ASHX Handler

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

答案 1 :(得分: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