0

我正在使用 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中正确发送。

4

1 回答 1

0

您可能已经编码以将文件作为GETroutes.rb 中的一种方法接收,因此它会尝试在浏览器中内联/显示它们,或者可能是视图中使用的链接,而它需要是一个使用该POST方法的按钮默认。

于 2017-03-05T03:28:05.910 回答