2016-04-01 6 views
0

Ich konnte Datei in meinem Amazon S3 mit Intervention speichern und jetzt muss ich die URL meines Bildes von S3. Und wie in Laravel 5.2 Dokumentation Abrufen Datei angegeben ist, genau wie diese,Wie bekomme ich URL von Amazon S3 mit Laravel 5.2 Storage :: Get() funktioniert nicht

$contents = Storage::get('file.jpg'); 

, aber wenn ich den Code versucht, und es auszugeben. es gibt nichts aus. Ich habe bereits die Berechtigung des Ordners in meinem Bucket geändert.

dies ist mein Code:

$file = Storage::get('products/3b2f81c6-7f73-4df8-a52f-82f60f50947a/cebadge.png'); 
    dd($file); 

ich die aws sdk installiert und wird versuchen, es jetzt zu arbeiten. Ich habe die meisten Artikel schon gelesen, aber ich habe wirklich kein Glück, eine Lösung zu finden. Kann mich jemand auf den richtigen Weg führen? Danke.

Codebild in s3 zu sparen, nur

$folderName = $request->input('folname')."/"; 
    $img = Image::make($file); 
    $origName = $request->file('file')->getClientOriginalName(); 
Storage::put($s3Bucket.'/'.$directory.'/'.$folderName.'/'.$origName, $img->__toString()); 
+0

irgendwelche Artikel, die ich lesen sollte? –

+0

Okay, jetzt weiß ich, warum ich nichts jedes Mal bekomme ich Speicher verwendet :: get() es ist, weil mein Code zum Hochladen falsch ist! lol. –

Antwort

0

Okay, nach viel zum Lesen AWS SDK für PHP-Dokumentation und Artikel online endlich verstehen, teile ich, wie es funktioniert, auch die grundlegend diejenigen.

Mein Problem stellte sich heraus, nicht die Datei zu bekommen, sondern die Datei in s3 zu speichern.

Ich benutzte den obigen Code (siehe meine Frage oben), um eine Datei hochzuladen. Es war der falsche Code. Was stimmt damit nicht? Ich habe die Datei nicht in einen Stream konvertiert, bevor ich sie in einen String umgewandelt und dann nach s3 hochgeladen habe. Was ich getan habe, war es direkt in String zu streamen und hochzuladen. Deshalb bekomme ich nichts, wenn ich storage :: get() verwende.

falscher Code:

$img = Image::make($file); 
    $origName = $request->file('file')->getClientOriginalName(); 
Storage::put($s3Bucket.'/'.$directory.'/'.$folderName.'/'.$origName, $img->__toString()); 

und was sonst ist hier falsch. Wenn Sie den Bucket-Namen eingeben, müssen Sie den Bucket-Namen nicht angeben, da sonst ein Ordner erstellt wird.

richtiger Code:

$image = $request->file('file'); //the image 
     $img = Image::make($file); // using interventation 
$image_normal = $img->stream(); // to stream 
Storage::put($origName, $image_normal->__toString(),'public'); //to string 

und die Datei öffentlich zugänglich zu machen, ist nur einen dritten Parameter ‚public‘ sonst wird es automatisch als privat.

um es zusammenzufassen. Was Sie tun müssen, um s3-Dateien für Ihre Website hochzuladen und zu verwenden, ist Folgendes.

  1. Erstellen Sie Ihr Konto in AWS s3, folgen Sie einfach den Anweisungen in Laravel 5.2 Dokumentation zum Einrichten der Dateisysteme.php in config \ Ordner

  2. das Standardspeicher

'default' => 'S3' bis s3,

  1. Ein Bild hochladen

    $origName = $request->file('file')->getClientOriginalName(); 
    $image = $request->file('file'); 
    $img = Image::make($file); 
    $image_normal = $img ->stream(); 
    Storage::put($origName, $image_normal->__toString(),'public'); 
    
  2. die URL eines Bildes bekommen ist so einfach wie unter URL

    https://s3-ap-southeast-1.amazonaws.com/mybucket/citibanko.PNG

    https://s3-[region].amazonaws.com/[yourbucketname]/filename.PNG

  3. zusätzlich, wenn Sie den Namen der Datei in Ihrem Eimer Verwendung Code unten aufgelistet werden sollen:

    $ files = Speicher :: Dateien ('/'); Speicherauszug ($ Dateien);

für die Ordner

$ files = Speicher :: Dateien ('folder'); Speicherauszug ($ Dateien);

in Amazon s3 Unterverzeichnisse sind wirklich irrelevant, es ist nur Eimer und Dateinamen.

Verwandte Themen