1

这个问题:

在中等信任环境中创建目录?

有点相同,但答案并没有真正帮助。

在我的网站上,我在名为“Products2”的主目录中保存了一堆产品图像,其中包含基于项目 ID 的图像的各种子目录 0/0/0/1、0/0/0/2 等。

我有很多问题

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

该网站托管在与 Medium Trust 共享的主机上。

我已要求我的托管公司对文件夹设置适当的权限,以便我可以使用这些功能,这些功能从根本上是使我的网站正确显示图像所必需的。伙计们已经这样做了,但由于某种原因,服务器设置不断恢复,然后我到处乱扔错误。

我被指出:

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

4

1 回答 1

0

在 SharePoint 中,我使用SPSecurity.RunWithElevatedPrivileges 委托对此进行了管理。没有这个,代码将在当前用户的权限下运行;这是一个 ASP.NET 版本:

ASPSecurity.RunWithElevatedPrivileges 的 Asp.Net 替代方案

另一种选择是查看自定义代码访问安全性;但是,如果您对主机几乎没有控制权,那么第一个解决方案可能是您的最佳途径。

这是我将它用于带有 SharePoint 的 Web 部件的地方:

使用 VSeWSS 1.3 创建 Web 部件 - 第 II 部分

至于路径无效的问题,它应该足够简单以检查正在生成的内容。

于 2012-04-12T14:03:09.753 回答