我正在使用 rails 应用程序来显示存储在 sql server db 中的数据。数据输入都是通过 MS Access 前端进入 sql server db 完成的。rails 应用程序是通过访问应用程序输入的信息的“只读”查看器。
在访问前端,我使用绑定的对象框架让用户将各种类型的文档(.pdf、.msg、.docx 等)上传到数据库中。该对象存储在我的 sqlserver 上的 varbinary 字段中。这在使用 Access 前端时可以正常工作。使用正确的主机应用程序正确检索和显示文档。
问题在于将这些相同的对象发送回以通过 rails 应用程序查看时。
当我尝试通过浏览器将二进制数据作为文件发送时,收到的文件无法被其主机应用程序读取。发送下来的文件的文件扩展名是正确的,但应用程序似乎无法读取它们。我肯定会遇到一些问题——当我在记事本中检查文件时,我看到了文本片段,但文件有问题,因此 MS Word 或 PDF 阅读器等无法读取它们。
控制器中的代码非常简单:
def view_word_doc
a=Attachment.find(params[:id])
send_data a.Document, :filename => 'flibber.docx'
end
(文档是具有 varbinary 的表中的字段)
这在浏览器中有预期的结果,我被问到是否要打开或保存文件,它尝试使用 word 打开文档。但是字说文件已损坏。当我尝试打开 .pdf、.msg 文件等时,结果类似。
我也尝试使用 send_file。在那种情况下,我得到一个控制器错误——
AttachmentsController#view 中的编码::UndefinedConversionError
"\x81" 到 UTF-8 从 Windows-1252 到 UTF-8 的转换
我已将类型保留为默认值,我理解为 Application/Octet-stream 但我不太熟悉这意味着什么。
正如我所提到的,这一切都适用于访问前端。只是无法在rails中正确发送。