我有一个显示 PDF/Word/Excel 文件的 Asp.NET 站点,但我想隐藏文件的位置,即如果用户通过链接请求文件而不是显示路径,只需打开文件名,我已经在其他网站上看到了一些其他帖子,但由于它们很旧,所以它们不会炒锅。
任何帮助表示赞赏。
谢谢
我有一个显示 PDF/Word/Excel 文件的 Asp.NET 站点,但我想隐藏文件的位置,即如果用户通过链接请求文件而不是显示路径,只需打开文件名,我已经在其他网站上看到了一些其他帖子,但由于它们很旧,所以它们不会炒锅。
任何帮助表示赞赏。
谢谢
一些 ASP.NET 文件是动态生成的。它们是使用 C# 代码或磁盘资源生成的。这些文件不需要 Web 表单。相反,ASHX 通用处理程序是理想的。它可以从查询字符串动态返回图像、写入 XML 或任何其他数据。
解决这个问题的一种方法是编写一个自定义的 .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