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