我的asp.net应用程序中有一个文件夹,其中包含某些类型的连接用户(管理员帐户或允许的其他帐户)只能访问(下载)的doc文件
我该怎么做?
任何想法?
提前谢谢。
答案 0 :(得分:1)
.NET中的App_Data文件夹受到保护,因此非常适合此目的。我通常将敏感文件放在这里,然后有一个页面“ViewDoc.aspx”执行安全检查,然后将文件发送给用户(使用Response.Write)。
答案 1 :(得分:1)
将敏感文件放在网站root之外,因此无法通过URL访问它们。
之后,使用此HttpHandler
(用VB.NET编写)来提供文件:
Public NotInheritable Class FileHandler
Implements IHttpHandler
Public ReadOnly Property IsReusable() As Boolean Implements System.Web.IHttpHandler.IsReusable
Get
Return False
End Get
End Property
Public Sub ProcessRequest(ByVal context As System.Web.HttpContext) Implements System.Web.IHttpHandler.ProcessRequest
If Not String.IsNullOrEmpty(context.Request.QueryString("FileName")) Then
Dim fileName As String = context.Request.QueryString("FileName")
Try
Dim filesPath As String = "D:\TheFiles\"
Dim fileInfo As New IO.FileInfo(filesPath & fileName)
If fileInfo.Exists Then
Dim fileExt As String = fileInfo.Extension.Remove(0, 1).ToUpperInvariant
If fileExt = "JPG" Then
context.Response.ContentType = "image/jpeg"
Else
context.Response.ContentType = "image/" & fileExt
End If
context.Response.TransmitFile(fileInfo.FullName)
End If
Catch ex As Exception
End Try
End If
End Sub
End Class
并在web.config中注册此处理程序,如下所示:
<httpHandlers>
<add verb="*" path="secfile.axd" type="MyApp.FileHandler, MyApp" validate="false"/>
</httpHandlers>
像这样使用:
<a href="secfile.axd?pic=sample.jpg" />
记住将文件类型添加到处理程序,并按文件类型更改response.contenttype
。
使用处理程序不是唯一的方法,您可以在aspx文件中使用context.Response.TransmitFile(fileInfo.FullName)
。
答案 2 :(得分:0)
执行此操作的一种简单方法是不将这些文档放在ASP.NET应用程序的文件夹中,而是将其放在文件系统中无法直接从浏览器访问的其他位置。然后以编程方式,如果他/她有权这样做,您可以将文件提供给用户。