如何将SQL Server图像数据类型保存到文件系统?

问题描述:

我遇到了从我的SQL数据库(代码如下)中读取图像数据类型blob的方式问题。当我直接访问此页面时,此代码正常工作。 PDF将打开并工作得很好。但是,当我尝试使用此页面下载文件并以编程方式将其保存到文件系统时,它失败(500服务器错误),并且我已验证它是相同的URL。如何将SQL Server图像数据类型保存到文件系统?

所以,我的问题是从数据库映像数据类型下载文件并将其保存到磁盘的最佳方式是什么?

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> 

哇哦 - 这是比我想象的将是比较容易的方式...

System.IO.File.WriteAllBytes(CombinedDocumentPath, intern.ResumeFile.ToArray()) 

当您将浏览器指向它的网页作品,但它的错误,当你点你的程序了。也许你的WebRequest在HTTP GET请求中省略了所需的studentid。如果您收到错误500,此错误可能会记录更多关于的详细信息,为什么在服务器上失败,因此IIS/ASP错误日志是第一个查找的地方。

至于你发布的代码,在内存中读取整个文件,然后将其封送到Response中是一种处理流的可怕方式。由于每次请求的内存需求增加,它不会扩展并会在负载下终止您的服务器。一个明智的方法是使用CommandBehavior.SequentialAccess来获得SqlBytes.Stream,然后按chunk将内容写出chuk。

+0

你知道我在哪里能得到这个实现的例子吗? – EdenMachine 2010-07-12 12:20:18