使用mongo gridfs从文件资源中创建curl_file_create

时间:2014-12-10 11:12:51

标签: php curl

我将MongoDb中的文件存储为二进制数据,我可以获取二进制数据,如果我var_dump,它会将其显示为Resource #1000或类似。现在我需要通过curl将此文件发送到其他服务器进行处理,但是curl_file_create需要文件路径。

如果我的文件没有路径,该怎么办?

我试过把它放进去,但没有成功。

private function sendToApi($resource, $name) {
    $cFile = curl_file_create($resource, 'application/pdf', $name);
    $postData = ['file' => $cFile];

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_USERPWD, 'username' . ':' . 'pass');
    curl_setopt($ch, CURLOPT_URL, 'http://api.endpoint.com/process/pdf');
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: multipart/form-data']);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 0);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
    curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
    $res = curl_exec($ch);
    curl_close($ch);

    $obj = json_decode($res);
    return $obj;
}

错误

PHP警告:curl_file_create()期望参数1为字符串,资源给定。

2 个答案:

答案 0 :(得分:0)

要获取gridFS二进制数据,请使用方法“getBytes()”http://php.net/manual/en/mongogridfsfile.getbytes.php

$cFile = curl_file_create($resource->getBytes(), 'application/pdf', $name);

答案 1 :(得分:0)

将文件创建为临时文件并使用它。

$tmp = tmpfile();
fwrite($tmp, $content);
fseek($tmp, 0);
$meta = stream_get_meta_data($tmp);
$cFile = curl_file_create($meta['uri'], 'application/pdf', $name);
$post = ['file' => $cFile];