使用经典ASP&;从数据库下载DOCX文件;VBScript
我试图维护一个旧的ASP页面,该页面从数据库检索文件并将其下载给最终用户。此页面适用于较旧的文件,但现在使用Docx文件类型“损坏”文件 我认为它也在“腐蚀”旧文件,但是Word能够处理细微的差异,而DocX格式的文件则更挑剔 下面是进行下载的代码使用经典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
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