这个问题:
在中等信任环境中创建目录?
有点相同,但答案并没有真正帮助。
在我的网站上,我在名为"Products2"的主目录中保存了一堆产品图像,其中包括各种子目录 0/0/0/1、0/0/0/2 等,其中包含基于项目 ID 的图像。
我遇到了许多问题
Security Exception
Description: The application attempted to perform an operation not allowed by the security policy. To grant this application the required permission please contact your system administrator or change the application's trust level in the configuration file.
Exception Details: System.Security.SecurityException: Request for the permission of type 'System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.
由于权限的原因,尝试使用DirectoryInfo
和createDirectory
等。
该网站托管在与中等信任的共享主机上。
我已经要求我的托管公司在文件夹上设置适当的权限,以便我可以使用这些功能,这些功能是使我的网站正确显示图像的基本要求。伙计们已经这样做了,但由于某种原因,服务器设置不断恢复,然后我到处抛出错误。
有人指出:
http://msdn.microsoft.com/en-us/library/system.web.hosting.virtualpathprovider.aspx
通过我的托管服务提供商,但我无法实现我需要的东西。
有人可以帮助我吗?
例如,尝试获取目录中包含的图像列表并将它们绑定到 ASP:Repeater:
Private Function getThumbnails(ByVal directoryPath As String, mainImg As String) As DataTable
Dim imgTable As New DataTable("images")
Dim imageURL As DataColumn = New DataColumn("url")
imgTable.Columns.Add(imageURL)
Dim imageID As DataColumn = New DataColumn("id")
imgTable.Columns.Add(imageID)
Dim dirInfo As New DirectoryInfo(directoryPath)
Dim fileList() As FileInfo = dirInfo.GetFiles("*.jpg")
For Each Image In fileList
If InStr(Image.Name, "-tb") > 0 And InStr(Image.Name, mainImg) <= 0 Then
Dim imgDetail As DataRow = imgTable.NewRow()
Dim theMapPath = HttpContext.Current.Server.MapPath("~/Products2")
Dim dirUrl = "/Products2" & Replace(Replace(directoryPath, theMapPath, ""), "", "/")
Dim imgURL As String = Path.Combine("http://" & Request.ServerVariables("SERVER_NAME") & dirUrl, Image.Name)
imgURL = Replace(Replace(Replace(imgURL, "dev.", "www."), "~", ""), "admin.", "www.")
imgDetail.Item("url") = imgURL
imgDetail.Item("id") = Image.Name
imgTable.Rows.Add(imgDetail)
End If
Next
Return imgTable
End Function
此函数以字符串形式接收目录,变量 directoryPath
是它的关键,并以Server.MapPath
生成的格式返回,因此D://etc...
被告知我需要使用相对路径,但是尝试了各种"明显"选项后,我无法获得相同的功能。
在我看来,这只是意味着"/Products2/0/0/1/"等,但这不起作用,我收到错误说路径无效。
要做:
Uploading (using saveAs from an HttpPostedFile)
Delete images (File.Delete)
Create Directory (Directory.Create(), from Dim Directory As New DirectoryInfo()
并按照上述功能从目录中抓取图像并显示。
我将如何使用VirtualPathProvider
来执行此操作?
在 SharePoint 中,我使用 SPSecurity.RunWithElevatedPrivileges 委托来管理它。如果没有这个,代码将在当前用户的权限下运行;这是一个 ASP.NET 版本:
Asp.Net SPSecurity.RunWithElevatedPrivileges的替代方案
另一种选择是查看自定义代码访问安全性;但是,如果您对主机几乎没有控制权,那么第一个解决方案可能是您最好的途径。
下面是我将其用于具有 SharePoint 的 Web 部件的位置:
使用 VSeWSS 1.3 创建 Web 部件 - 第二部分
至于路径无效的问题,检查正在生成的内容应该足够简单。