我有一個由兩個獨立部分組成的項目。一方面,有一個Rails應用程序,另一方面,還有一個帶CakePhp服務器的ExtJs客戶端。在Rails中附加文件並在ExtJs + CakePHP中讀取它們
需要發生的事情是:在Rails中附加一個文件(這是通過使用Paperclip完成的)並且能夠在Cake端讀取它們。如果兩個系統都在同一臺服務器上,這可能很容易,但是這需要遠程完成,所以Cake端將調用Rails路由並且Rails將提供該文件。
蛋糕代碼來下載文件:
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。我可以上傳,然後下載除此類型以外的其他任何文件。上傳後,我可以在rails中讀取該文件,沒有問題。 Cake端看起來有些問題,因爲發生這種情況的原因是:我可以下載該文件,但之後我無法使用LibreOffice打開它。我似乎將mime類型正確設置爲apache,並且瀏覽器識別文件的類型以及打開它的應用程序。看來我可以用TextEdit打開文件。
所以,問題是:什麼是錯的?爲什麼在php/CakePHP端不打開.docx文件?
任何想法將不勝感激。
爲什麼你不使用CakePHP媒體視圖呢?實際上,您的整個方法完全沒有CakePHP。 :)嘗試媒體類,看看它是否與框架核心的單元測試代碼一起工作。 – burzum 2012-07-06 00:23:10