Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [Laravel] Upload di file al di fuori della cartella del progetto

    ciao!

    in laravel avrei la necessità di fare l'upload di file in una cartella esterna al progetto.
    ma cmq nella stessa root del server.

    io ho provato così:
    codice:
    class UploadController extends Controller {
    
        public function uploadImmagini(Request $req) {
    
            if ($req->hasFile('file')) {
                $dirLarge = '/public_html/IMG_ARTICOLI/test/';
    
                $uploadedFile = $req->file('file');
                $ext = $uploadedFile->getClientOriginalExtension();
                $nome = uniqid('', true) . '.' . $ext;
    
                try {
                    $uploadedFile->move($dirLarge, $nome);
    
                    return response()->json([
                        'res' => 'ok',
                        'message' => 'File caricato correttamente',
                        'nome_file' => $nome
                    ]);
                } catch (\RuntimeException $ex) {
                    return response()->json([
                        'res' => 'ko',
                        'message' => 'Errore: ' . $ex->getMessage()
                    ]);
                }
            }
    
        }
    
    }
    ma mi da sempre questo errore:
    codice:
    {
        "res": "ko",
        "message": "Errore: Unable to create the \"/public_html/IMG_ARTICOLI/test/\" directory."
    }
    ovviamente la cartella esiste, e gli ho già dato i permessi 777.

    PS: lo so che il primo consiglio è quelo di usare la cartella storage di laravel, ecc.
    ma non posso farlo, perchè è una riscrittura di una programma già esistenzte, che ha migliaia di immagini la dentro.
    e dovrei fare tutta una migrazione che è un pò complicato fare.
    quindi avrei la necessità di salvare le immagini la dentro!

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    La root del progetto non è la cartella "public_html"?
    In tal caso dovresti rimuoverla dal path indicato in $dirLarge perché ci sei già dentro.

  3. #3
    Definisci public_html come disco local in filesystem.php (es. chiamandolo "articoli") e salva direttamente lì utilizzando il codice della documentazione.

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

    https://laravel.com/docs/8.x/filesystem#file-uploads


    $path = $request->file('file')->store('IMG_ARTICOLI', 'articoli');

  4. #4
    ciao!

    allora ho messo questo dentro a filesystems.php:
    codice:
        'disks' => [
    
            'local' => [
                'driver' => 'local',
                'root' => storage_path('app'),
            ],
    
            'immagini' => [
                'driver' => 'local',
                'root'   => '/public_html',
            ],
    
            'public' => [
                'driver' => 'local',
                'root' => storage_path('app/public'),
                'url' => env('APP_URL') . '/storage',
                'visibility' => 'public',
            ],
    
        ],
    poi nel controller:
    codice:
    class UploadController extends Controller {
    
        public function uploadImmagini(Request $req) {
    
            if ($req->hasFile('file')) {
                $dirLarge = '/public_html/IMG_ARTICOLI/test/';
    
                $uploadedFile = $req->file('file');
                $ext = $uploadedFile->getClientOriginalExtension();
                $nome = uniqid('', true) . '.' . $ext;
    
                try {
                    $path = $req->file('file')->store('IMG_ARTICOLI/test', 'immagini');
    
                    return response()->json([
                        'res' => 'ok',
                        'message' => 'File caricato correttamente',
                        'nome_file' => $path
                    ]);
                } catch (\RuntimeException $ex) {
                    return response()->json([
                        'res' => 'ko',
                        'message' => 'Errore: ' . $ex->getMessage()
                    ]);
                }
            }
    
        }
    
    }
    adesso mi esce questo errore che non capisco proprio:
    codice:
    Impossible to create the root directory \"/public_html\". Module 'sqlite3' already loaded

  5. #5
    Se metti un file test.php con questo contenuto (incluso il tag di apertura di PHP) in public_html e lo richiami da web, cosa ottieni?

    codice:
    print(__DIR__);

  6. #6
    in effetti mi da un altro path, ed ho cambiato così:
    codice:
            'immagini' => [
                'driver' => 'local',
                'root'   => '/home/vs43g4lm/public_html',
            ],
    a questo punto non mi da errore, ma non mi carica cmq il file.
    in verità non mi restituisce nulla, solo status 200.

    codice:
    class UploadController extends Controller {
    
        public function uploadImmagini(Request $req) {
    
            if ($req->hasFile('file')) {
                $uploadedFile = $req->file('file');
                $ext = $uploadedFile->getClientOriginalExtension();
                $nome = uniqid('', true) . '.' . $ext;
    
                try {
                    $path = $req->file('file')->store('IMG_ARTICOLI/test', 'immagini');
    
                    return response()->json([
                        'res' => 'ok',
                        'message' => 'File caricato correttamente',
                        'nome_file' => $path
                    ]);
                } catch (\RuntimeException $ex) {
                    return response()->json([
                        'res' => 'ko',
                        'message' => 'Errore: ' . $ex->getMessage()
                    ]);
                }
            }
    
        }
    
    }

  7. #7

  8. #8
    ciao.

    era postman che non funzionava.
    funziona tutto:
    codice:
    class UploadController extends Controller {
    
        public function uploadImmagini(Request $req) {
    
            if ($req->hasFile('file')) {
                $data = $req->all();
    
                $files = $req->file('file');
                foreach ($files as $file) {
                    $path = $file->store('IMG_ARTICOLI/test', 'immagini');
                }
            }
    
        }
    
    }
    ho fatto una modifica in quanto da angular gli arriverà un array di files.
    dalle prime prove sembra funzioni tutto.

    grazie!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.