我有一个由两个独立部分组成的项目。一方面,有一个 Rails 应用程序,另一方面,有一个带有 CakePhp 服务器的 ExtJs 客户端。
需要做的是:在 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 打开文件。
所以,问题是:出了什么问题?为什么 .docx 文件不能在 php / Cakephp 端打开?
任何想法都将受到高度赞赏。