0

Railsアプリを使用して、SQLServerデータベースに保存されているデータを表示しています。データ入力はすべて、MSAccessフロントエンドを介してSQLServerデータベースに行われます。Railsアプリは、アクセスアプリを介して入力された情報の「読み取り専用」ビューアです。

アクセスフロントエンドでは、バインドされたオブジェクトフレームを使用して、ユーザーがさまざまな種類(.pdf、.msg、.docxなど)のドキュメントをデータベースにアップロードできるようにします。オブジェクトは、SQLServerのvarbinaryフィールドに格納されています。これは、Accessフロントエンドを使用する場合に正常に機能します。ドキュメントは適切に取得され、適切なホストアプリで表示されます。

問題は、それらの同じオブジェクトを返送して、railsアプリで表示できるようにする場合です。

バイナリデータをブラウザからファイルとして送信しようとすると、受信したファイルがホストアプリで読み取れなくなります。送信されたファイルのファイル拡張子は正しいですが、アプリケーションはそれらを読み取ることができないようです。メモ帳でファイルを調べると、テキストのスニペットが表示されますが、ファイルに問題があるため、MSWordや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のEncoding ::UndefinedConversionError

「\x81」からUTF-8への変換(Windows-1252からUTF-8への変換)

タイプをデフォルトのままにしました。これはApplication/Octet-streamであると理解していますが、これが何を意味するのかについてはあまり詳しくありません。

前述したように、これはすべてアクセスフロントエンドで正常に機能します。Railsで正しく送信できません。

4

1 に答える 1