首页 > 解决方案 > 无法在 onehub.com API 上上传文件

问题描述

我正在尝试使用那里的 API 在 onehub.com 上上传文件。文档在这里

我已经用 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']);

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

标签: phpapiphp-curl

解决方案


它需要表单多部分内容,经过一些修改后我在这里找到了一些帮助,我修复了它并成功上传了文件。

代码:

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

推荐阅读