0

我正在尝试从 node.js 应用程序下载“开放文档格式”文件,该应用程序正在通过服务器上的 Open Office 进行转换/导出(将 HTML 转换为各种格式)。这适用于 PDF、文本、HTML、Word 等,但不适用于导出为 ODF 的文档。直接通过 Web 应用程序前端转换和下载相同的文件可以正常工作;由于某种原因,通过 XMLHTTP 下载并使用 ADO 保存到磁盘会损坏文档。

这是我的功能:

Public Function downloadExport(fileToDownload, saveToPath)

Dim xmlhttp, ostream As Object

Set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP")
Set ostream = CreateObject("Adodb.Stream")

xmlhttp.setOption(2) = 13056
xmlhttp.open "GET", fileToDownload, False
'Cookie headers are correct
xmlhttp.setRequestHeader "Cookie", "sessionID=Arrays.4Qqu2s32xQQyZA4"
xmlhttp.setRequestHeader "Cookie", "express_sid=s%3ADHclQm7vYT1Ixa2SD2wjk"
xmlhttp.send

ostream.Type = 1
ostream.open
ostream.write xmlhttp.responseBody
ostream.SaveToFile saveToPath, 1
ostream.Close

Set ostream = Nothing
Set xmlhttp = Nothing

End Function

谢谢EOF

4

1 回答 1

0

跳过 ADO 流,只需检索.responseBody到动态字节数组。然后打开一个文件进行二进制写入并写入 Byte 数组。只需使用普通的 VB6 I/O 语句。

此外,您的数据声明很粗糙,而且您xmlhttp是一个变体(因此代码“只是靠运气”工作)。

更好的是设置对库的引用,使用早期绑定,并用预定义的命名常量值替换幻数。

您对.setOption外观的使用也不正确,您确定您不会在那里遇到异常(“参数不是可选的”)吗?这是一个方法,而不是一个属性。

但我怀疑其中任何一个都可以解决您所看到的问题。

乱用会话 cookie 也表明您在这里做了一些不正当的事情(如在illicit中)。查阅该网站的使用条款。网络抓取是盗版。

于 2014-04-14T05:15:51.773 回答