2015-05-01 162 views
0

我有一種情況,一個Web服務器發佈一個JSON數組,其中包含一些參數以及其中的文檔數據。我得到的數據,內容類型和文件名。我將這個JSON轉換爲一個關聯數組,以便我可以使用它。下面給出了轉換後的關聯數組的一個例子。在PHP中寫入JSON到DOC文件

[dealer] => Array 
    (
    [fullName] => John Doe 
    [email] => [email protected] 
    [resume] => Array 
    (
    [file] => Array 
    (
    [data] => UEsDBBQABgAIAAAAIQCVRr6H0AEAAB8IAAATAAgCW0NvbnRlbnRfVHlwZXNdLnhtbCCiBAIooAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC0VU1v4bWxQSwECLQAUAAYACAAAACEAh7oKST4BAACpAgAAFAAAAAAAAAAAAAAAAADhdQAAd29yZC93ZWJTZXR0aW5ncy54bWxQSwECLQAUAAYACAAAACEAhub8n6scAADr+gAAGgAAAAAAAAAAAAAAAABRdwAAd29yZC9zdHlsZXNXaXRoRWZmZWN0cy54bWxQSwUGAAAAABQAFAAiBQAANJQAAAAA 
    [fileName] => John_resume.docx 
    [contentType] => application/octet-stream 
) 
) 

我試圖寫這個文件系統和我能做到這一點,但該文件被寫成文本文件,而不是作爲一個二進制文件。下面還提供了我已經完成的代碼。

$json = file_get_contents('php://input'); 
$document = json_decode($json, true, 32, JSON_BIGINT_AS_STRING); 

$resumeFileData = $document['resume']['file']['data']; 
$filePath = $folderPath . DS . $document['resume']['file']['fileName']; 
$resumeFile = new File($filePath, true); 
$resumeFile->write($resumeFileData); 
$resumeFile->close(); 

我在做什麼不正確?我正在使用CakePHP 2.5.4

在此先感謝

+0

您想創建一個docx文檔嗎?一個word文件,只使用cakephp? – zeflex

+0

你是什麼意思,它不是寫成二進制文件。你期待什麼文件格式? – Augwa

+0

我不想創建一個'新'docx文檔。我正在接收一個docx文檔作爲json流,我只需要將該流存儲回可讀文件結構。目前,當我保存並重新打開它時,我看到的是與我在示例中共享的相同的亂碼字符串 - 導致我相信缺少MIME類型或某些標題信息 – ChicagoSky

回答

1

試試這個。

$resumeFileData = base64_decode($document['resume']['file']['data']); 
+0

謝謝 - 我還添加了'base64_decode(chunk_split($ document ['resume'] ['file'] ['data']));'處理大文件 – ChicagoSky

+0

我不喜歡認爲你不想這樣做,通常在編碼時使用,而不是解碼。 – Augwa

+0

實際上可能會弄亂文件,因爲它會默認每76個字符添加一個/ r/n。 – Augwa