Управление каталогами и изображениями с помощью Medium Trust .NET 2.0
Этот вопрос:
Создание каталогов в среде среднего доверия?
Это то же самое, но ответ не очень помог.
На моем веб-сайте у меня есть куча изображений продуктов, которые хранятся в главном каталоге с названием "Products2", и представляют собой различные подкаталоги 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
?
1 ответ
В SharePoint я управлял этим с http://spsecurity.runwithelevatedprivileges/. Без этого код работал бы с разрешениями текущего пользователя; вот версия ASP.NET:
Asp.Net Альтернатива SPSecurity.RunWithElevatedPrivileges
Другая альтернатива - взглянуть на безопасность доступа к пользовательскому коду; однако, если у вас мало контроля над хостом, то первое решение, вероятно, ваш лучший маршрут.
Вот где я использовал его для веб-части с SharePoint:
Создание веб-части с VSeWSS 1.3 - часть II
Что касается проблемы с неверным путем, он должен быть достаточно простым, чтобы проверить, что генерируется.