2015-05-01 307 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