无法在onehub.com API上上传文件。

问题描述 投票:0回答:1

我想在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']);

它没有返回错误,但文件没有上传。

php api php-curl
1个回答
0
投票

它需要多部分内容的形式,我已经找到了一些帮助。此处 经过一番修改,我把这个问题解决了,并成功上传了文件。

编码。

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);
}
© www.soinside.com 2019 - 2024. All rights reserved.