2017-07-25 70 views
0

我使用LiveCode社区服务器8.1.2的Windows Server 2016数据中心(运行Apache 2.4)“把二进制”,而不是LiveCode服务器上的二进制文件

我用下面的代码放在命令只输出文本

put header "content-disposition: attachment; filename=" & tFileName 
put header "content-type: application/pdf" 
put header "content-transfer-encoding: binary" 
put url("binfile:" & "../resources/documents/" & tActualFileName into tBinaryData 
put binary tBinaryData 

当包含在浏览器调用的脚本中时,此代码在浏览器窗口中以文本形式返回数据,而不是可下载的pdf文件。

几个月前,我写了这段代码,它的工作,我今天回到它并没有。

我已经检查过两次,我确定它是正确的,但我不知道还有什么可以打破它。

我对 测试的Chrome 59在Windows 8.1专业版的Chrome 59在MacOS塞拉利昂10.12.5 Safari浏览器在iOS 10.3.2

任何帮助或指导将是最欢迎的。

编辑:从铬 网络头标中表示以下 Network headers from Chrome

编辑: 修正代码,以从第4行删除单词“二进制” - 这是产生其在的末端产生的文本输出的误差返回的结果 - 它没有解决问题 - 在响应头中仍然返回文本和“Content-Type:text/html”

编辑: 源的开头有2个空行使用查看源代码,Chrome上的Ctrl-U)

View Source

+0

如果您可以从Chrome开发人员工具中的网络查看器获取实际的http响应并查看它发送了什么,可能会有用。 – JeffUK

+0

杰出点杰夫 - 我现在已经添加了网络标题。在查看响应头文件“Content-Type:text/html; charset = windows-1252”看起来很可疑。虽然我在代码 –

+0

中明确指定了“放置标题”内容类型:application/pdf“,并且没有内容处置...随机预感,您能否尝试首先声明内容类型?它应该不重要,但我必须总是把它放在第一位 – JeffUK

回答

0

经过几天的工作,我现在有一个解决方案。这是一个工作,我不知道实际问题是什么,但为了完整性,它值得发布。

的“%PDF”代码前的2个空白行的问题,并加入各种调试后,“放”语句我找到有问题的代码下来下列2所陈述

require ("codeSnippets.lc") 
require ("databaseOperations.lc") 

每个语句添加一条额外的输出线。我推测引用的文件必须以某种方式输出一个空白的行,不会被注意到一个正常的HTML页面。

有不含代码要做到这一点,从而测试我下面的代码添加到“codeSnippets.lc”

put "test1" 

最后一行,我添加了需要声明

之间的相似线
require ("codeSnippets.lc") 
put "test2" 
require ("databaseOperations.lc") 

输出在不同行上显示“test1”和“test2”。我无法解释在必需脚本的最后一行和主脚本的下一行之间发生了什么。如果有人能够阐明这一点,我会非常感激。

值得注意的是,我有其他需要声明没有显示此问题。下面的工作,而不会产生额外的线

require ("../config.lc") 
require("../resources/library/templateFunctions.lc") 

由于周围的工作我干脆搬到我需要的文件下载到一个名为“documentHandler.lc”新文件的代码的各个位的副本,并称为以下

require("../resources/library/documentHandler.lc") 

这一切现在完美。