2017-07-25 62 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") 

這一切現在完美。

相關問題