невозможно загрузить файл через API onehub.com - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь загрузить файл на 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']);

, она не возвращает ошибок, но файл не загружен.

1 Ответ

0 голосов
/ 23 апреля 2020

Требуется многокомпонентный контент, и я нашел некоторую помощь здесь , после некоторой модификации я исправил это и успешно загрузил файлы.

Код:

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);
}
...