ASP.NET C # Доступ к файлам - PullRequest
0 голосов
/ 06 июня 2011

Архитектура моего приложения " ImageDemo "

Технология: ASP.NET Язык: C #

Предыдущая архитектура: Страницы asp.netхранятся в веб-сервере.В веб-сервере существует папка с именем ImageRepository .Я сохраняю изображения (просматриваемые, выбранные и сохраняемые пользователями) в ImageRepository .Я мог получить доступ ко всем атрибутам и содержанию изображений, хранящихся в ImageRepository .Я использовал для отображения изображений, используя Изображение элемент управления ASP.NET.

Новая архитектура: Вместо хранения изображений в папке на веб-сервере, я настраиваювыделенный Файловый сервер со следующими учетными данными (скажем)

имя пользователя: my_name

пароль: wXy12Apl

I может войтив систему, перейдите в папку, где я храню изображения, прочитайте все атрибуты файлов.Затем я добавил имя файла в раскрывающийся список, чтобы он выглядел следующим образом:

enter image description here

Итак, при событии onselectedindex exchange я пытался отобразить изображенияиспользуя Image элемент управления ASP.NET.Но я не мог.В чем будет проблема?Я мог получить доступ ко всем атрибутам файлов, но я не мог прочитать содержимое изображения.

Например;Когда я выбираю первое изображение, контроллер выглядит как enter image description here

Когда я выбираю второе изображение, контроллер выглядит как enter image description here

Ответы [ 2 ]

1 голос
/ 06 июня 2011

Возможно, у вас нет прав доступа к файлу.Вы можете сделать так, как предлагает @ Smudge202, и применить правильные разрешения, или вы можете запустить часть своего кода в другом контексте.См. Этот код для олицетворения пользователя: http://www.codeproject.com/KB/cs/zetaimpersonator.aspx

0 голосов
/ 06 июня 2011

Браузер / конечный пользователь не имеет доступа к файловому серверу.Существует несколько быстрых решений, которые вы можете реализовать:

1) Добавьте разрешение для конечных пользователей на чтение из нового общего файлового ресурса - если ваш сайт является внутренним (только в локальной сети), то это, возможно, лучшее решение.Если сайт открыт для Интернета, это может оказаться не самым безопасным решением.

2) Создайте простой веб-сервис (WCF или ASMX).Убедитесь, что служба может читать из нового общего ресурса, и чтобы служба возвращала содержимое в виде веб-ответа.

Вот (почти полный) пример последнего, старого фрагмента кода, отвечающего старому стилю aspобработчик .net (ashx), который реализует IHttpHandler - я бы рекомендовал использовать WCF лично:

Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
    _Context = context
    _Context.Response.Clear()
    _Context.Response.ContentType = "image/jpg"
    If ImageParameter IsNot Nothing Then

        Dim imageData As Byte() = Nothing
        If String.IsNullOrEmpty(ImageParameter.CompressedFileStorageLocation) Then
            Return
        End If

        Dim imagePath As String = String.Format("{0}{1}", CS_IMAGE_REPOSITORY_BASE_PATH, ImageParameter.CompressedFileStorageLocation)
        Try
            If IO.File.Exists(imagePath) Then
                Using s As FileStream = New FileStream(imagePath, FileMode.Open)
                    ReDim imageData(s.Length)
                    Dim bytesRead As Integer = s.Read(imageData, 0, s.Length)
                    s.Close()
                End Using
            End If
        Catch ex As Exception
            Debug.Print(ex.Message)
        End Try

        _Context.Response.OutputStream.Write(imageData, 0, imageData.Length)
    End If

End Sub
...