2 つの別々の部分で構成されるプロジェクトがあります。一方には Rails アプリがあり、もう一方には CakePhp サーバーを備えた ExtJs クライアントがあります。
Rails にファイルを添付し (これは Paperclip を使用して行います)、Cake 側でそれらを読み取れるようにする必要があります。両方のシステムが同じサーバー上にあれば簡単かもしれませんが、これはリモートで行う必要があるため、Cake 側が Rails ルートを呼び出し、Rails がファイルを提供します。
ファイルをダウンロードする Cake コード:
function download_file($path, $file_name, $content_type, $size) {
if ($fd = fopen ($path, "r")) {
header("Content-type: " . $content_type);
header("Content-Disposition: attachment; filename=\"".$file_name."\"");
header("Content-length: $size");
header("Cache-control: private"); //use this to open files directly
header('Pragma: public');
ob_clean();
flush();
echo readfile($path);
// $this->log(apache_response_headers(), 'debug');
}
fclose ($fd);
}
ドキュメントを提供する Ruby / Rails コード:
send_file document.path, :type => document.document_content_type
Rails ドキュメント モデル:
class Document < ActiveRecord::Base
belongs_to :attachable, :polymorphic => true
has_attached_file :document,
:url => '/download/:id/:fingerprint/documents'
def path
document.path
end
end
.docx という 1 種類のファイルを除いて、すべてが期待どおりに機能します。アップロードしてから、このタイプのファイル以外の他のファイルをダウンロードできます。ファイルがアップロードされた後、問題なくレールでファイルを読み取ることができます。Cake 側に何か問題があるようです。何が起こるかというと、ファイルをダウンロードできますが、その後 LibreOffice で開くことができません。Apacheとブラウザがファイルの種類とそれを開くアプリケーションを認識するので、MIMEタイプは正しく設定されているようです。テキストエディットで開けるようです。
では、問題は次のとおりです。何が間違っているのでしょうか。php / Cakephp 側で .docx ファイルが開かないのはなぜですか?
どんなアイデアでも大歓迎です。