使用经典ASP&;从数据库下载DOCX文件;VBScript

使用经典ASP&;从数据库下载DOCX文件;VBScript,vbscript,asp-classic,Vbscript,Asp Classic,我试图维护一个旧的ASP页面,该页面从数据库检索文件并将其下载给最终用户。此页面适用于较旧的文件,但现在使用Docx文件类型“损坏”文件 我认为它也在“腐蚀”旧文件,但是Word能够处理细微的差异,而DocX格式的文件则更挑剔 下面是进行下载的代码 Set rs = Server.CreateObject("ADODB.Recordset") ' opening connection rs.Open "SELECT FileName, FileData, Content

我试图维护一个旧的ASP页面,该页面从数据库检索文件并将其下载给最终用户。此页面适用于较旧的文件,但现在使用Docx文件类型“损坏”文件

我认为它也在“腐蚀”旧文件,但是Word能够处理细微的差异,而DocX格式的文件则更挑剔

下面是进行下载的代码

    Set rs = Server.CreateObject("ADODB.Recordset")

    ' opening connection
    rs.Open "SELECT FileName, FileData, ContentType FROM Docs WHERE GetDocID='" & GetDoc & "'" , conn, 2, 4

    If Not rs.EOF Then
        Response.Clear()
        Response.AddHeader "Content-Disposition", "attachment; filename="& rs("FileName")
        Response.ContentType = rs("ContentType")
        Response.BinaryWrite rs("FileData")
        Response.Flush()
        'Response.Close()
        Response.End()

    End If

    rs.Close
    Set rs = Nothing
有什么想法可能会遗漏或导致问题吗

我注意到上传前的文件比上传后的文件大一个字节

以下是上传代码:

    Dim rs
    Set rs = Server.CreateObject("ADODB.Recordset")             
    rs.Open "Docs", conn, 2, 2              
    rs.AddNew
    rs("FileName") = fileName
    rs("FileSize") = fileSize
    rs("FileData").AppendChunk = fileData
    rs("ContentType") = contentType
    rs("DocTitle") = DocTitle
    rs("ProjectID") = ProjectID                 
    rs.Update
    rs.Close
    Set rs = Nothing

尝试使用ChrB(charcode)函数以二进制显式编写。
(ChrB函数将字符转换为字节)


您是否将文件大小存储在数据库中?我已经被这个问题烧坏了,问题是sql返回了额外的字节。我不记得原因了。我可以通过将数据分块取出并删除文件大小后的所有内容来修复它。不,没有存储文件大小。我将继续这条路线。感谢如果它无法验证(可以通过运行类似这样的操作来确认这一点,因为内容长度错误,请尝试添加此标题
Response.AddHeader(“内容长度”),LenB(rs(“文件数据”))
。如果您说它“正在损坏”什么意思?Word报告一个错误,文件不加载或文件加载,但只是胡言乱语,举几个例子。你需要考虑,而旧文档“可以”。如果要作为ASCII格式传输和处理,则必须将DOCX作为二进制文件处理,否则会损坏文件。因此,必须以二进制模式打开、以二进制模式读取和以二进制模式写入,才能使其保持有效。
sFileData = rs("FileName")
For i=1 To Len(sFileData)
  Response.BinaryWrite ChrB(Mid(sFileData,i,1))
Next