我正在使用rails应用程序来显示存储在sql server数据库中的数据。数据输入全部通过MS Access前端完成到sql服务器数据库中。rails应用程序是通过access应用程序输入信息的“只读”查看器。
在access前端,我使用绑定对象框架让用户上传各种类型的文档(.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(Document是表中包含varbinary的字段)
这在浏览器中具有预期的结果,系统询问我是否要打开或保存该文件,然后它尝试使用word打开该文档。然而,word表示该文档已损坏。当我尝试打开.pdf、.msg文件等时,出现类似的结果。
我也尝试过使用send_file。在这种情况下,我得到一个控制器错误--
AttachmentsController#view中的编码::未定义的转换错误
从Windows-1252到UTF-8转换中的"\x81“到UTF-8
我将类型保留为default,我知道它是Application/Octet-stream,但我不太熟悉这是什么意思。
正如我所提到的,这一切都与access前端配合得很好。只是不能在rails中正确发送。
发布于 2017-03-05 11:28:06
您可能已经编码将文件作为GET方法接收到您的routes.rb中,因此它试图以内联/在浏览器中显示它们,或者可能是视图中使用的链接,而它需要是一个默认使用POST方法的按钮。
https://stackoverflow.com/questions/13536280
复制相似问题