"put binary" 命令只是输出文本而不是 LiveCode Server 上的二进制文件
"put binary" command is just outputting text instead of a binary file on LiveCode Server
我在 Windows Server 2016 Datacenter (运行 Apache 2.4)
上使用 LiveCode Community Server 8.1.2
我使用下面的代码
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
当包含在浏览器调用的脚本中时,此代码 returns 数据在浏览器中作为文本 window 而不是可以下载的 pdf 文件。
几个月前我写了这段代码并且它起作用了,我今天回来看它却不起作用。
我已经仔细检查过,我确定它是正确的,但我不知道还有什么可以破坏它。
我测试过
Chrome 59 Windows 8.1 Pro
Chrome 59 在 MacOS Sierra 10.12.5 上
iOS 10.3.2
上的 Safari
非常欢迎任何帮助或指导。
编辑:
来自 Chrome 的网络 headers 如下所示
编辑:
修改了代码以从第 4 行删除单词 "binary" - 这产生了一个错误,该错误在返回结果的末尾产生文本输出 - 它没有解决问题 - 仍然返回文本和 "Content-Type:text/html" 在响应中 header
编辑:
源码开头有2个空行(使用View Source后,Chrome上Ctrl-U)
经过几天的努力,我现在有了一个解决方案。这是一个解决方法,我不知道实际问题是什么,但为了完整起见,值得发布。
“%PDF”代码之前的 2 个空行是问题所在,在添加各种调试 'put' 语句后,我在以下 2 个语句中跟踪了有问题的代码
require ("codeSnippets.lc")
require ("databaseOperations.lc")
这些语句中的每一个都在输出中添加了额外的一行。我推测引用的文件必须以某种方式输出一个空白行,该空白行对于正常的 html 页面不会被注意到。
其中没有代码可以执行此操作,因此作为测试,我将以下代码添加到 'codeSnippets.lc'
的最后一行
put "test1"
并且我在 require 语句之间添加了类似的行
require ("codeSnippets.lc")
put "test2"
require ("databaseOperations.lc")
输出在不同的行显示 "test1" 和 "test2"。我无法解释 Required 脚本的最后一行和主脚本的下一行之间发生了什么。如果有人能阐明这一点,我将不胜感激。
值得注意的是,我还有其他 require 语句没有显示此问题。以下工作没有产生额外的行
require ("../config.lc")
require("../resources/library/templateFunctions.lc")
作为解决方法,我只是将文档下载所需的各种代码的副本移动到一个名为 "documentHandler.lc" 的新文件中,并调用了以下内容
require("../resources/library/documentHandler.lc")
现在一切正常。
我在 Windows Server 2016 Datacenter (运行 Apache 2.4)
上使用 LiveCode Community Server 8.1.2我使用下面的代码
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
当包含在浏览器调用的脚本中时,此代码 returns 数据在浏览器中作为文本 window 而不是可以下载的 pdf 文件。
几个月前我写了这段代码并且它起作用了,我今天回来看它却不起作用。
我已经仔细检查过,我确定它是正确的,但我不知道还有什么可以破坏它。
我测试过 Chrome 59 Windows 8.1 Pro Chrome 59 在 MacOS Sierra 10.12.5 上 iOS 10.3.2
上的 Safari非常欢迎任何帮助或指导。
编辑:
来自 Chrome 的网络 headers 如下所示
编辑: 修改了代码以从第 4 行删除单词 "binary" - 这产生了一个错误,该错误在返回结果的末尾产生文本输出 - 它没有解决问题 - 仍然返回文本和 "Content-Type:text/html" 在响应中 header
编辑: 源码开头有2个空行(使用View Source后,Chrome上Ctrl-U)
经过几天的努力,我现在有了一个解决方案。这是一个解决方法,我不知道实际问题是什么,但为了完整起见,值得发布。
“%PDF”代码之前的 2 个空行是问题所在,在添加各种调试 'put' 语句后,我在以下 2 个语句中跟踪了有问题的代码
require ("codeSnippets.lc")
require ("databaseOperations.lc")
这些语句中的每一个都在输出中添加了额外的一行。我推测引用的文件必须以某种方式输出一个空白行,该空白行对于正常的 html 页面不会被注意到。
其中没有代码可以执行此操作,因此作为测试,我将以下代码添加到 'codeSnippets.lc'
的最后一行put "test1"
并且我在 require 语句之间添加了类似的行
require ("codeSnippets.lc")
put "test2"
require ("databaseOperations.lc")
输出在不同的行显示 "test1" 和 "test2"。我无法解释 Required 脚本的最后一行和主脚本的下一行之间发生了什么。如果有人能阐明这一点,我将不胜感激。
值得注意的是,我还有其他 require 语句没有显示此问题。以下工作没有产生额外的行
require ("../config.lc")
require("../resources/library/templateFunctions.lc")
作为解决方法,我只是将文档下载所需的各种代码的副本移动到一个名为 "documentHandler.lc" 的新文件中,并调用了以下内容
require("../resources/library/documentHandler.lc")
现在一切正常。