我想在onehub.com上使用API上传文件。文档 此处
我已经用curl编码,但未能上传图片。
编码
fileUpload("/folders/123421/files",$_FILES['upload'], $data);
function fileUpload($url,$localFile,$token)
{
$size = $localFile['size'];
$boundary = hash('sha256', uniqid('', true));
$headers = [
'Authorization: Bearer ' . $token,
'content-type: multipart/form-data; boundary='.$boundary,
'content-length: '.$size
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://ws-api.onehub.com".$url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$args['file'] = new CurlFile($localFile['tmp_name'], $localFile['type'], $localFile['name']);
curl_setopt($ch, CURLOPT_POSTFIELDS, $args);
$result = curl_exec($ch);
return $result;
}
我得到的错误是 couldn't open file "/tmp/phpItjbyg"
如果我改了这一行
$args['file'] = new CurlFile($localFile['tmp_name'], $localFile['type'], $localFile['name']);
到
$args['file'] = new CurlFile($localFile['name'], $localFile['type'], $localFile['name']);
它没有返回错误,但文件没有上传。
它需要多部分内容的形式,我已经找到了一些帮助。此处 经过一番修改,我把这个问题解决了,并成功上传了文件。
编码。
fileUpload("/folders/123421/files",$_FILES['upload'], $data);
/
function buildMultiPartReq($ch, $boundary, $files, $token)
{
$delimiter = '-------------' . $boundary;
$data = '';
$data .= "--" . $delimiter . "\r\n"
. 'Content-Disposition: form-data; name="file"; filename="' . $files['name'] . '"' . "\r\n\r\n"
. $files['tmp_name'] . "\r\n";
$data .= "--" . $delimiter . "\r\n"
. 'Content-Disposition: form-data; name="type"; filename="' . $files['name'] . '"' . "\r\n\r\n"
. $files['type'] . "\r\n";
$data .= "--" . $delimiter . "\r\n"
. 'Content-Disposition: form-data; name="size"; filename="' . $files['name'] . '"' . "\r\n\r\n"
. $files['size'] . "\r\n";
$data .= "--" . $delimiter . "\r\n"
. 'Content-Disposition: form-data; name="content"; filename="' . $files['name'] . '"' . "\r\n\r\n"
. file_get_contents($files['tmp_name']) . "\r\n";
$headers = [
'Authorization: Bearer ' . $token,
'Content-Type: multipart/form-data; boundary=' . $delimiter
];
$data .= "--" . $delimiter . "--\r\n";
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POSTFIELDS => $data
]);
return $ch;
}
function fileUpload($url, $localFile, $token)
{
$ch = curl_init("https://ws-api.onehub.com" . $url);
$ch = buildMultiPartReq($ch, uniqid(), $localFile, $token);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_exec($ch);
return curl_error($ch);
}