Как сохранить тип данных изображения SQL Server в файловой системе? - PullRequest
0 голосов
/ 12 июля 2010

У меня возникли проблемы с тем, как я читаю блоты моего типа данных из моей базы данных SQL (код ниже). Этот код работает нормально, когда я получаю доступ к этой странице напрямую. PDF откроется и работает просто отлично. Однако, когда я пытаюсь использовать эту страницу для загрузки файла и программного сохранения его в файловую систему, происходит сбой (ошибка 500 серверов), и я убедился, что это один и тот же URL в любом случае.

Итак, мой вопрос: каков наилучший способ загрузить файл из типа данных образа базы данных и сохранить его на диск?

PDF.aspx

<%@ Page Language="VB" %>
<%@ Import Namespace="System.Collections.Generic" %> 

<script runat="server">
    Protected Sub Page_PreInit(ByVal sender As Object, ByVal e As System.EventArgs)
        Page.Theme = String.Empty ' disable theme
        If (Request.ServerVariables("HTTP_USER_AGENT").IndexOf("MSIE") > 0) Then
            Response.Cache.SetCacheability(HttpCacheability.Private)
        Else
            Response.Cache.SetCacheability(HttpCacheability.NoCache)
        End If
    End Sub

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim interns As IEnumerable(Of InternMag.Intern) = InternMag.Intern.GetInternForPhotoOrResume(New Guid(Request.QueryString("studentid")))
        For Each intern As InternMag.Intern In interns
            Response.ContentType = intern.ResumeFileType
            Response.AddHeader("Content-Disposition", "attachment; filename=""Resume" & intern.ResumeFileExtension & """")
            Response.BinaryWrite(CType(intern.ResumeFile.ToArray(), Byte()))
        Next
    End Sub
</script>

Ответы [ 2 ]

2 голосов
/ 12 июля 2010

Страница работает, когда вы указываете на нее браузер, но она выдает ошибки, когда вы указываете на нее свою программу.Возможно, ваш WebRequest опускает обязательный объект в запросе HTTP GET.Если вы получаете ошибку 500, эта ошибка, вероятно, регистрирует более подробную информацию о , почему произошел сбой на сервере, и, следовательно, журналы ошибок IIS / ASP - самое первое место для поиска.

Что касается кода, который вы разместили, то чтение всего файла в памяти и последующее его маршалирование в Response - ужасный способ обработки потоков.Он не будет масштабироваться и убьет ваш сервер под нагрузкой из-за увеличения потребности в памяти для каждого запроса.Разумным способом было бы использовать CommandBehavior.SequentialAccess , чтобы получить SqlBytes.Stream , а затем записать содержимое из chuk по chunk.

0 голосов
/ 12 июля 2010

Ого - это было НАИБОЛЕЕ легче, чем я думал, что это будет ...

System.IO.File.WriteAllBytes(CombinedDocumentPath, intern.ResumeFile.ToArray())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...