Я написал REST-интерфейс для моего приложения ownCloud. У меня есть метод getFileFromRemote($path)
который должен возвращать объект JSON с содержимым файла.
К сожалению, это работает только тогда, когда файл, который я указал в $path
это текстовый файл Когда я пытаюсь вызвать метод для изображения или PDF
код состояния 200, но ответ пуст. Для возврата содержимого файла я использую file_get_contents
для получения контента.
Замечания: Я знаю, что ownCloud имеет интерфейс WebDAV, но я хочу решить эту проблему только с помощью REST.
РЕДАКТИРОВАТЬ
Это код серверной части (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]);
}
Первая строка загружает содержимое на сервер ownCloud и работает полностью.
Вы, вероятно, должны base64_encode
содержимое вашего файла, чтобы json_encode / decode обрабатывал его правильно:
return new DataResponse([
'path'=>$path,
'fileContent' => base64_encode($content) // convert binary data to alphanum
]);
и тогда при получении файла через вторую сторону вам всегда нужно будет:
$fileContent = base64_decode($response['fileContent']);
Это только один, но один из самых простых способов справиться с этим. Кстати, рано или поздно вы обнаружите, что Mime-Type
было бы полезно в ответ.
Других решений пока нет …