두 개의 개별 파트로 구성된 프로젝트가 있습니다. 한쪽에는 Rails 앱이 있고 다른 한쪽에는 CakePhp 서버가있는 ExtJs 클라이언트가 있습니다.파일을 레일스에 첨부하고 ExtJs + CakePHP에서 읽으십시오.
무슨 일이 일어날 필요가있는가 : 파일을 레일스에 첨부하십시오 (이것은 Paperclip을 사용하여 이루어집니다). 그리고 케이크 쪽에서 읽을 수 있어야합니다. 두 시스템이 같은 서버에 있으면 쉽지만 원격으로 수행해야하므로 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);
}
루비/레일 코드를 문서 :
send_file document.path, :type => document.document_content_type
레일 문서 모델 :
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. 업로드 할 수 있고 이후에이 유형의 파일을 제외한 다른 파일을 다운로드 할 수 있습니다. 파일을 업로드 한 후에 문제없이 파일을 읽을 수 있습니다. 거기에 무슨 일이 일어 났는지는 Cake 측에서 잘못된 것 같습니다. 파일을 다운로드 할 수는 있지만 그 후에 LibreOffice로 열 수는 없습니다. mime 형식이 아파치로 올바르게 설정되어 있고 브라우저가 파일 형식과 응용 프로그램을 인식하는 것으로 인식하는 것 같습니다. TextEdit으로 파일을 열 수있는 것 같습니다.
그래서 질문은 무엇이 잘못 되었습니까? .docx 파일이 php/Cakephp 측에서 열리지 않는 이유는 무엇입니까?
모든 아이디어를 높이 평가할 것입니다.
왜 CakePHP 미디어보기를 사용하지 않습니까? 실제로 모든 방법은 CakePHP로 할 일이 전혀 없습니다. :) 미디어 클래스를 사용해 프레임 워크의 핵심에서이 unittested 코드로 작동하는지 확인하십시오. – burzum