"放二进制"命令只是在LiveCode Server上输出文本而不是二进制文件

时间:2017-07-25 13:47:28

标签: livecode

我在Windows Server 2016 Datacenter上使用LiveCode社区服务器8.1.2(运行Apache 2.4)

我使用以下代码

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文件。

几个月前我编写了这段代码并且它有效,我今天又回到了它并且它没有。

我已经仔细检查了一下,我确定它是正确的,但我不知道还有什么可以打破它。

我已经测试过了 Windows 8.1 Pro上的Chrome 59 Mac OS Sierra 10.12.5上的Chrome 59 iOS 10.3.2上的Safari

非常欢迎任何帮助或指导。

编辑: 来自Chrome的网络标头如下所示 Network headers from Chrome

编辑: 修改代码删除单词" binary"从第4行 - 这产生了一个错误,它在返回结果的末尾产生文本输出 - 它没有解决问题 - 仍然返回文本和"内容类型:text / html&#34 ;在响应标题

编辑: 源的开头有2个空白行(使用View Source后,Chrome上的Ctrl-U)

View Source

1 个答案:

答案 0 :(得分:0)

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

"%PDF"之前的2个空白行代码是问题,并在添加各种调试后放置'我在下面的两个陈述中追踪了违规代码

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

这些语句中的每一个都在输出中添加了一行。我假设引用的文件必须以某种方式输出一个空白行,这对于普通的html页面来说是不被注意的。

其中没有代码可以执行此操作,因此我将以下代码添加到' codeSnippets.lc'

的最后一行
put "test1"

我在require语句

之间添加了类似的行
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")

现在一切都很完美。