php - 使用 JSON 发送二进制文件内容

标签 php json rest file-get-contents owncloud

我已经为我的 ownCloud 应用编写了一个 REST 接口(interface)。我有方法 getFileFromRemote($path) 应该返回一个包含文件内容的 JSON 对象。 不幸的是,这仅在我在 $path 中指定的文件是纯文本文件时才有效。当我尝试调用图像或 PDF 的方法时,状态代码为 200,但响应为空。为了返回文件内容,我使用 file_get_contents 来检索内容。


注意:我知道 ownCloud 有一个 WebDAV 接口(interface),但我只想用 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]);
}

第一行 retrieve 在 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 在响应中很有用。

关于php - 使用 JSON 发送二进制文件内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29816007/

相关文章:

java - 如何在java中自定义使用Gson对象创建的json

java - Youtube Oauth 回调不起作用

javascript - v2.1 及更高版本已弃用 REST API

php - 在php中从jquery检索数组值

php - $_SERVER ['REMOTE_ADDR' ] 返回 127.0.0.1

javascript - 从具有 2 个 y 轴的 Highcharts 图表的 JSON 数组中提取数据系列

python - 使用 JSON 的 Django 模板

javascript - 如果 http 状态代码不是 200,则缺少 CORS header ‘Access-Control-Allow-Origin’

php - 在 Docker Swarm 模式下链接应用程序

php - 页面未在操作系统类中正确重定向