Загрузка файла в Box из Drupal - PullRequest
0 голосов
/ 12 января 2020

Ниже приведен запрос скручивания, который загружает файл в Box.

curl -X POST https://upload.box.com/api/2.0/files/content \
 -H "Authorization: Bearer <token>" \
 -H "Content-Type: multipart/form-data" \
 -F attributes='{"name":"Test.pdf", "parent":{"id":"123"}}' \
 -F file=@test.pdf

Я пытаюсь сделать то же самое в коде:

$contents = file_get_contents($uri);

$attributes = array(
  'name' => $filename,
  'parent' => array('id' => $folderId),
);

$options = array(
  'attributes' => $attributes,
  'file' => $contents,
  'headers' => array(
    'Content-Type' => 'multipart/form-data',
    'Authorization' => 'Bearer '. $boxAccess->getToken()
  )
);

$uri = 'https://upload.box.com/api/2.0/files/content';

$client = \Drupal::httpClient();
$response = $client->request('POST', $uri, $options);

Но я возвращаюсь ответ 400 Bad запрос от Box.

Есть идеи, что не так с кодом, который я использую?

1 Ответ

0 голосов
/ 14 января 2020

Структура массива $ options выглядит не совсем правильно.

Drupal 8 по умолчанию использует HTTP-библиотеку Guzzle для HTTP-запросов. В документации Guzzle есть раздел по структурированию данных формы из нескольких частей: http://docs.guzzlephp.org/en/stable/quickstart.html#sending -form-files

И ваши атрибуты выглядят так, как будто они JSON закодированы в вашем первом примере, поэтому вы можете использовать json_encode ($ attribute) вместо необработанного массива.

...