2012-07-05 3 views
0

두 개의 개별 파트로 구성된 프로젝트가 있습니다. 한쪽에는 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 측에서 열리지 않는 이유는 무엇입니까?

모든 아이디어를 높이 평가할 것입니다.

+0

왜 CakePHP 미디어보기를 사용하지 않습니까? 실제로 모든 방법은 CakePHP로 할 일이 전혀 없습니다. :) 미디어 클래스를 사용해 프레임 워크의 핵심에서이 unittested 코드로 작동하는지 확인하십시오. – burzum

답변

0

답을 찾았습니다. 실제로 그것은 일종의 Cake 문제 였고 Cake가 뷰를 렌더링하는 방식과 관련이있었습니다.

케이크 MediaView 때문에이 파일의 경로를 구축하는 방식의 원격 파일 작업을 허용하지 않습니다,하지만 난

$this->autoRender = false; 

을 추가 한 모든 것이 그 후 잘 갔다.

이 게시물 도움이되었다 : Corrupted .docx download using phpdocx

덕분에 MediaView와 힌트에 대한뿐만 아니라 버줌 할 수 있습니다.

관련 문제