Laravel Dropbox API v2 - пустой файл при загрузке - PullRequest
0 голосов
/ 25 января 2020

То, что у меня есть до сих пор

Прямо сейчас у меня есть рабочая аутентификация oauth2 между laravel пользователем и API Dropbox. Каждый пользователь может загружать файлы в свою личную папку.

Проблема

После загрузки файла с помощью laravel с Dropbox API v2 я вижу, что есть загружен пустой (0 байт) файл.

Используется для выполнения sh этой задачи:

  • Laravel
  • Guzzle
  • Dropbox API Библиотека

Что мне не хватает?

Код

Моя функция для обработки формы выглядит следующим образом:

$formFile = $request->file('fileToUpload');
$path = $formFile->getClientOriginalName();
$file = $formFile->getPathName();
$result = Dropbox::files()->upload($path, $file);
return redirect('dropboxfiles');

И моя функция загрузки файлов-> в моей библиотеке Dropbox выглядит следующим образом:

$client = new Client;

   $response = $client->post("https://content.dropboxapi.com/2/files/upload", [
      'headers' => [
         'Authorization' => 'Bearer '.$this->getAccessToken(),
         'Content-Type' => 'application/octet-stream',
         'Dropbox-API-Arg' => json_encode([
            'path' => $path,
            'mode' => 'add',
            'autorename' => true,
            'mute' => true,
            'strict_conflict' => false
          ])
       ],
       'data-binary' => '@'.$file
   ]);

Файл, как я уже сказал, успешно загружен. Правильное имя, но 0 байт. Итак, пустой файл.

Большое спасибо заранее за вашу помощь!

Обновление

С помощью следующего кода я заставил его работать. Мой вопрос, хотя, если есть лучшее решение "Laravel -Like" вместо использования fopen?

$response = $client->post("https://content.dropboxapi.com/2/files/upload", [
            'headers' => [
                'Authorization' => 'Bearer '.$this->getAccessToken(),
                'Dropbox-API-Arg' => json_encode([
                    'path' => $path,
                    'mode' => 'add',
                    'autorename' => true,
                    'mute' => true,
                    'strict_conflict' => false
                ]),
                'Content-Type' => 'application/octet-stream',
            ],
            'body' => fopen($file, "r"),
        ]);

1 Ответ

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

Как упомянул @Greg ( см. ссылка для перекрестных ссылок) Мне удалось решить эту проблему с помощью

'body' => fopen($file, "r"),

вместо

'data-binary' => '@'.$file

This как упоминал Грег, потому что data-binary используется в запросах Curl. Другие HTTP-клиенты, например Guzzle в моем случае, используют разные имена.

...