Do not speak Portuguese? Translate this site with Google or Bing Translator
Laravel upload arquivos para DropBox gratuito

Posted on: September 08, 2021 09:52 AM

Posted by: Renato

Categories: Laravel s3 dropbox PHP

Views: 1032

Laravel upload arquivos para DropBox gratuito

Requisitos

PHP versão 7.1 ou 7.2 ou 7. +

Vamos criar / instalar o Laravel mais recente através do #CLI com o seguinte comando no diretório do seu projeto.

1
composer create-project --prefer-dist laravel/laravel laraveldropbox

Após a instalação do Laravel Framework instale

Instale o pacote de driver do Laravel Dropbox

Aqui iremos através do #CLI instalar o pacote para comunicar a caixa de depósito. Abra o comando / cli em seu diretório Laravel instalado e execute o seguinte comando

composer require spatie/flysystem-dropbox

Criar aplicativo e gerar token de acesso

Registre a conta ou faça login para criar o aplicativo e gerar o token de acesso à caixa de depósito a partir do seguinte url https://www.dropbox.com/developers/apps
Preencha os campos a seguir e clique no botão criar aplicativo.

Gerar token de acesso do aplicativo Dropbox

Vá para o seu aplicativo e clique em gerar para gerar token de acesso. mantenha esse token em seu arquivo que definiremos no arquivo .env na próxima etapa.

dropbox-generate-access-token-button

Definir token no arquivo .env

1
DROPBOX_TOKEN=PASTE_HERE_GENERATED_TOKEN

Integrar / configurar benjamincrozat / laravel-dropbox-driver

Incluindo provedores em config / app .file

 

App\Providers\DropboxServiceProvider::class,

Adicionar a seguinte matriz do Dropbox às configurações de disco em config / filesystem.php

1
2
3
4
'dropbox' => [
  'driver' => 'dropbox',
  'token' => env('DROPBOX_TOKEN'),
],

Criar controlador

Crie o arquivo do controlador DropboxController.php no diretório app / Http / Controllers com o seguinte código

1
2
3
4
5
6
7
8
9
namespace App\Http\Controllers;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Support\Facades\View;
 
class DropboxController extends BaseController{
  public function uploadToDropbox(){
                return View::make('dropbox');
  }
}

Definir rota para upload

Escreva as seguintes linhas no arquivo web.php para a rota de upload do arquivo no Dropbox

1
Route::get('/upload-to-dropbox','DropboxController@uploadToDropbox');

Criar vista

Vamos criar um arquivo de visão no diretório resources \ views e nomeá- lo “dropbox.blade.php” aqui vamos usar #bladeTemplate
Escreva o seguinte código no arquivo

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<!doctype html>
<html lang="{{ app()->getLocale() }}">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
 
        <title>Upload to Dropbox</title>
        <link href="https://fonts.googleapis.com/css?family=Raleway:100,600" rel="stylesheet" type="text/css">
 
        <!-- Styles -->
        <style>
            html, body {
                background-color: #fff;
                color: #636b6f;
                font-family: 'Raleway', sans-serif;
                font-weight: 100;
                height: 100vh;
                margin: 0;
            }
 
            .full-height {
                height: 100vh;
            }
 
            .flex-center {
                align-items: center;
                display: flex;
                justify-content: center;
            }
            .title {
                font-size: 84px;
            }
            .m-b-md {
                margin-bottom: 30px;
            }
        </style>
    </head>
    <body>
        <div class="flex-center position-ref full-height">
            <div class="content">
                @if($errors->any())
                <h4>{{$errors->first()}}</h4>
                @endif
                <div class="title m-b-md">
                    Upload file to dropbox
                    <form enctype="multipart/form-data" method="post" action="upload_to_dropbox">
                            <input type="hidden" value="{{csrf_token()}}" name="_token" />
                            <input type="file" name="upload_file" />
                            <input type="submit" value="Upload to Dropbox" />
                    </form>
                </div>
            </div>
        </div>
    </body>
</html>

Acesse-o em seu host local com o seguinte url
localhost / laraveldropbox / public / upload-to-dropbox /

laravel remover público do url

Criar rota para mão / upload de arquivo

Escreva a seguinte linha em seu arquivo de roteamento routes / web.php para manipular quando o arquivo for carregado e enviado ao seu servidor.

1
Route::post('/upload_to_dropbox','DropboxController@uploadToDropboxFile');

Adicionar espaços de nomes no arquivo DropboxController

1
2
3
4
5
6
namespace App\Http\Controllers;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Support\Facades\View;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Redirect;

Criar método para manuseio e upload de arquivo

Método de Criação

01
02
03
04
05
06
07
08
09
10
public function uploadToDropboxFile(Request $RequestInput){
    $file_src=$RequestInput->file("upload_file"); //file src
  $is_file_uploaded = Storage::disk('dropbox')->put('public-uploads',$file_src);
   
  if($is_file_uploaded){
    return Redirect::back()->withErrors(['msg'=>'Succesfuly file uploaded to dropbox']);
  } else {
    return Redirect::back()->withErrors(['msg'=>'file failed to uploaded on dropbox']);
  }
}

Nota: 

 

Custom Filesystems

Laravel's Flysystem integration provides support for several "drivers" out of the box; however, Flysystem is not limited to these and has adapters for many other storage systems. You can create a custom driver if you want to use one of these additional adapters in your Laravel application.

In order to define a custom filesystem you will need a Flysystem adapter. Let's add a community maintained Dropbox adapter to our project:

composer require spatie/flysystem-dropbox

Next, you can register the driver within the boot method of one of your application's service providers. To accomplish this, you should use the extend method of the Storage facade:

<?php

namespace App\Providers;

use Illuminate\Support\Facades\Storage;
use Illuminate\Support\ServiceProvider;
use League\Flysystem\Filesystem;
use Spatie\Dropbox\Client as DropboxClient;
use Spatie\FlysystemDropbox\DropboxAdapter;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        Storage::extend('dropbox', function ($app, $config) {
            $client = new DropboxClient(
                $config['authorization_token']
            );

            return new Filesystem(new DropboxAdapter($client));
        });
    }
}

The first argument of the extend method is the name of the driver and the second is a closure that receives the $app and $config variables. The closure must return an instance of League\Flysystem\Filesystem. The $config variable contains the values defined in config/filesystems.php for the specified disk.

Once you have created and registered the extension's service provider, you may use the dropbox driver in your config/filesystems.php configuration file.

 

 

 

 

 

 

DropboxFilesystemServiceProvider like this:

<?php

namespace App\Providers;

use Storage;
use League\Flysystem\Filesystem;
use Dropbox\Client as DropboxClient;
use League\Flysystem\Dropbox\DropboxAdapter;
use Illuminate\Support\ServiceProvider;

class DropboxFilesystemServiceProvider extends ServiceProvider
{
    public function boot()
    {
        Storage::extend('dropbox', function ($app, $config) {
            $client = new DropboxClient($config['accessToken'], $config['appSecret']);

            return new Filesystem(new DropboxAdapter($client));
        });
    }

    public function register()
    {
        //
    }
}

The service provider is also added to my config/app providers:

'providers' => [
    ...
    App\Providers\DropboxServiceProvider::class,
    ...
]

In my config/filesystems I've added the dropbox driver (dropbox app key and secret are also set in .env file):

        'dropbox' => [
            'driver' => 'dropbox',
            'key' => env('DROPBOX_APP_KEY'),
            'secret' => env('DROPBOX_APP_SECRET'),
        ]

Now, when I try to run the following code, it returns false and the file doesn't appear in my Dropbox. When I change the disk to 'local', the file gets uploaded to my local storage.

    $path = "pdf/file.pdf";
    $storage_path = Storage::path($path);
    $contents = file_get_contents($storage_path);
    $upload = Storage::disk('dropbox')->put($path, $contents);
    return $upload;



 


 

https://youtu.be/_CmmxS3_utk

https://laravel.com/docs/8.x/filesystem

 

https://github.com/spatie/flysystem-dropbox

 

https://www.youtube.com/watch?v=MEhibvy31oI

 

https://github.com/LaravelDaily/Laravel-File-Storage

 

https://flysystem.thephpleague.com/v1/docs/adapter/dropbox/

 

 


4

Share

Donate to Site


About Author

Renato

Developer

Add a Comment
Comments 0 Comments

No comments yet! Be the first to comment

Blog Search


Categories

OUTROS (16) Variados (109) PHP (133) Laravel (171) Black Hat (3) front-end (29) linux (114) postgresql (39) Docker (28) rest (5) soap (1) webservice (6) October (1) CMS (2) node (7) backend (13) ubuntu (56) devops (25) nodejs (5) npm (3) nvm (1) git (8) firefox (1) react (7) reactnative (5) collections (1) javascript (7) reactjs (8) yarn (0) adb (1) Solid (2) blade (3) models (1) controllers (0) log (1) html (2) hardware (3) aws (14) Transcribe (2) transcription (1) google (4) ibm (1) nuance (1) PHP Swoole (5) mysql (31) macox (4) flutter (1) symfony (1) cor (1) colors (2) homeOffice (2) jobs (3) imagick (2) ec2 (1) sw (1) websocket (2) markdown (1) ckeditor (1) tecnologia (14) faceapp (1) eloquent (14) query (4) sql (40) ddd (3) nginx (9) apache (4) certbot (1) lets-encrypt (3) debian (12) liquid (1) magento (2) ruby (1) LETSENCRYPT (1) Fibonacci (1) wine (1) transaction (1) pendrive (1) boot (1) usb (1) prf (1) policia (2) federal (1) lucena (1) mongodb (4) paypal (1) payment (1) zend (1) vim (4) ciencia (6) js (1) nosql (1) java (1) JasperReports (1) phpjasper (1) covid19 (1) saude (1) athena (1) cinnamon (1) phpunit (2) binaural (1) mysqli (3) database (42) windows (6) vala (1) json (2) oracle (1) mariadb (4) dev (12) webdev (24) s3 (4) storage (1) kitematic (1) gnome (2) web (2) intel (3) piada (1) cron (2) dba (18) lumen (1) ffmpeg (2) android (2) aplicativo (1) fedora (2) shell (4) bash (3) script (3) lider (1) htm (1) csv (1) dropbox (1) db (3) combustivel (2) haru (1) presenter (1) gasolina (1) MeioAmbiente (1) Grunt (1) biologia (1) programming (22) performance (3) brain (1) smartphones (1) telefonia (1) privacidade (1) opensource (3) microg (1) iode (1) ssh (3) zsh (2) terminal (3) dracula (1) spaceship (1) mac (2) idiomas (1) laptop (2) developer (37) api (5) data (1) matematica (1) seguranca (2) 100DaysOfCode (9) hotfix (1) documentation (1) laravelphp (10) RabbitMQ (3) Elasticsearch (1) redis (2) Raspberry (4) Padrao de design (4) JQuery (1) angularjs (4) Dicas (43) Kubernetes (3) vscode (2) backup (1) angular (3) servers (2) pipelines (1) AppSec (1) DevSecOps (4) rust (1) RustLang (1) Mozilla (1) algoritimo (1) sqlite (1) Passport (2) jwt (5) security (2) translate (1) kube (2) iot (1) politica (2) bolsonaro (1) flow (1) podcast (1) Brasil (1) containers (3) traefik (1) networking (1) host (1) POO (2) microservices (2) bug (1) cqrs (1) arquitetura (3) Architecture (4) sail (3) militar (1) artigo (1) economia (1) forcas armadas (1) ffaa (1) autenticacao (2) autorizacao (2) authentication (4) authorization (3) NoCookies (1) wsl (4) memcached (1) macos (2) unix (2) kali-linux (1) linux-tools (5) apple (1) noticias (2) composer (1) rancher (1) k8s (1) escopos (1) orm (1) jenkins (4) github (5) gitlab (3) queue (1) Passwordless (1) sonarqube (1) phpswoole (1) laraveloctane (1) Swoole (1) Swoole (1) octane (1) Structurizr (1) Diagramas (1) c4 (1) c4-models (1) compactar (1) compression (1) messaging (1) restfull (1) eventdrive (1) services (1) http (1) Monolith (1) microservice (1) historia (1) educacao (1) cavalotroia (1) OOD (0) odd (1) chatgpt (1) openai (3) vicuna (1) llama (1) gpt (1) transformers (1) pytorch (1) tensorflow (1) akitando (1) ia (1) nvidia (1) agi (1) guard (1) multiple_authen (2) rpi (1) auth (1) auth (1) livros (2) ElonMusk (2) Oh My Zsh (1) Manjaro (1) BigLinux (2) ArchLinux (1) Migration (1) Error (1) Monitor (1) Filament (1) LaravelFilament (1) replication (1) phpfpm (1) cache (1) vpn (1) l2tp (1) zorin-os (1) optimization (1) scheduling (1) monitoring (2) linkedin (1) community (1) inteligencia-artificial (2) wsl2 (1) maps (1) API_KEY_GOOGLE_MAPS (1) repmgr (1) altadisponibilidade (1) banco (1) modelagemdedados (1) inteligenciadedados (4) governancadedados (1) bancodedados (2) Observability (1) picpay (1) ecommerce (1) Curisidades (1) Samurai (1) KubeCon (1) GitOps (1) Axios (1) Fetch (1) Deepin (1) vue (4) nuxt (1) PKCE (1) Oauth2 (2) webhook (1) TypeScript (1) tailwind (1) gource (2)

New Articles



Get Latest Updates by Email