0

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 ファイルが開かないのはなぜですか?

どんなアイデアでも大歓迎です。

4

1 に答える 1

0

これに対する答えを見つけました。実際、これはある種のCakeの問題であり、Cakeがビューをレンダリングする方法に関連していました。

Cakes MediaViewは、ファイルのパスを作成する方法のため、リモートファイルでの作業を許可していませんが、私は追加しました

$this->autoRender = false;

その後、すべてがうまくいきました。

この投稿は役に立ちました:phpdocxを使用した破損した.docxダウンロード

MediaViewのヒントを提供してくれたburzumにも感謝します。

于 2012-07-09T04:58:52.097 に答える