То, что у меня есть до сих пор
Прямо сейчас у меня есть рабочая аутентификация 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"),
]);