我有一个显示PDF / Word / Excel文件的Asp.NET站点,但我想隐藏文件的位置,即如果用户通过链接请求文件而不是显示路径只打开文件名,我在其他网站上看过其他一些帖子,但由于他们已经老了,所以他们不会上网。
感谢任何帮助。
由于
答案 0 :(得分:2)
动态生成一些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