0

我正在使用Rails應用程序來顯示存儲在sql服務器數據庫中的數據。數據輸入全部通過MS Access前端進入sql服務器數據庫。 Rails應用程序是通過訪問應用程序輸入信息的「只讀」查看器。Rails應用程序 - send_data從數據庫發送亂碼文檔

在訪問前端,我使用了一個綁定對象框讓用戶將各種類型的文檔(.pdf,.msg,.docx等)上傳到數據庫中。該對象存儲在我的sqlserver上的varbinary字段中。這在使用Access前端時工作正常。正確檢索文檔並使用正確的主機應用程序顯示文檔。

問題是當發送那些相同的對象回來通過rails應用程序來查看。

當我嘗試通過瀏覽器將文件作爲文件向下發送時,其主機應用程序無法讀取收到的文件。文件擴展名對於發送的文件是正確的,但應用程序不能正確讀取它們。我肯定會得到一些東西 - 當我檢查記事本中的文件時,我看到了文本的片段,但這些文件有些問題,所以它們無法被MS Word或PDF Reader等讀取。

代碼控制器是非常簡單的:

def view_word_doc 

    a=Attachment.find(params[:id]) 
    send_data a.Document, :filename => 'flibber.docx' 
end 

(文件是場INT具有VARBINARY他表)

這預期的結果在瀏覽器中,有人問我,如果我想打開或保存該文件,並嘗試使用word打開文檔。但是單詞說文檔已損壞。當我嘗試打開.pdf,.msg文件等時出現類似結果。

我也嘗試使用send_file。在這種情況下,我得到一個控制器錯誤 -

編碼:: UndefinedConversionError在AttachmentsController#查看

「\ X81」 爲UTF-8的轉換從Windows 1252到UTF-8

我有將該類型保留爲默認值,我知道它是Application/Octet-stream,但我不是這麼意思的。

正如我所提到的,這一切都與訪問前端正常工作。只是無法在軌道上正確發送它。

+0

'Application/Octet-stream'基本上強制瀏覽器將數據作爲文件下載,而不是顯示在瀏覽器中。例如,使用PDF中的「Application/Octet-stream」可以使PDF不會出現在瀏覽器窗口中。關於你的問題,我會認爲這是一個編碼問題。你有沒有玩過編碼? – csalvato

+0

要詳細說明,看起來您的系統沒有正確處理從軌道數據(UTF-8)到MS Access使用的數據(Windows-1252)轉換數據的內容。 – csalvato

+0

因此,似乎文件在數據庫中是完整的,因爲訪問應用程序可以讀取它們,但是當sendfiles發送它們時,我無法弄清楚如何讓文件發送是「Windows-1252」,無論這是什麼。有什麼想法嗎? – user1023110

回答

0

您可能已經編碼在您的routes.rb中以GET方法接收文件,因此它會嘗試在瀏覽器中內聯顯示它們,或者在視圖中使用可能的鏈接顯示它們,但它需要是一個按鈕它默認使用POST方法。

相關問題