2015-04-23 4 views
2

Я написал интерфейс REST для своего приложения ownCloud. У меня есть метод getFileFromRemote($path), который должен возвращать объект JSON с содержимым файла. К сожалению, это работает только тогда, когда файл, указанный мной в $path, является файлом открытого текста. Когда я пытаюсь вызвать метод для изображения или PDF, код состояния равен 200, но ответ пуст. Для возврата содержимого файла я использую file_get_contents для извлечения содержимого.Отправка содержимого двоичного файла с использованием JSON


Примечание: Я знаю OwnCloud имеет интерфейс WebDAV, но я хочу, чтобы решить эту проблему только с REST.


EDIT Это код на стороне сервера (OwnCloud):

public function synchroniseDown($path) 
{ 
    $this->_syncService->download(array($path));//get latest version 
    $content = file_get_contents($this->_homeFolder.urldecode($path)); 
    return new DataResponse(['path'=>$path, 'fileContent'=>$content]); 
} 

Первая строка извлекает downloades содержимое на сервере OwnCloud и работает полностью.

+0

Бит получения кода и доставки контента wiil будет полезен. – yergo

+0

Я добавил код – user2810895

ответ

2

Вы, вероятно, придется base64_encode ваше содержимое файла, чтобы сделать json_encode/декодированием обрабатывать его правильно:

return new DataResponse([ 
    'path'=>$path, 
    'fileContent' => base64_encode($content) // convert binary data to alphanum 
]); 

, а затем при получении файла через второй стороне, вы должны всегда:

$fileContent = base64_decode($response['fileContent']); 

Это только один, но самый простой способ справиться с этим. Кстати, рано или поздно вы обнаружите, что Mime-Type будет полезен в ответ.

Смежные вопросы