2017-10-17 2 views
9

Ich möchte Storage::put verwenden, um eine Datei zu schreiben. Die Datei ist möglicherweise sehr groß (> 100MB), daher möchte ich einen Stream verwenden, damit ich nicht blind alles in den Speicher packe.Wie kann ich eine Ressource verwenden, um Zeile für Zeile zu schreiben, aber immer noch Laravel eingebauten Speicher verwenden?

Ich werde mehrere API-Anfragen machen, und dann durchlaufen sie ihre Ergebnisse, so dass die Daten, die ich bekommen werde, kein Problem sind, wird es auf vernünftige Mengen beschränkt werden.

Nach dem documentation, muss ich verwenden:

Storage::put('file.xml', $resource); 

Aber was würde $resource hier sein?

Traditionell beim Schreiben von Dateien mit PHP habe ich es mit einer Kombination von , fwrite und fclose getan, um 'Zeile für Zeile' zu schreiben. Ich baue die Datei durch Schleifen durch verschiedene Sammlungen und Verwendung verschiedener APIs, so wie ich gehe, so $resource ist nicht ein Dateizeiger oder Dateiverweis, wie in der Dokumentation anderswo angesprochen wird.

Also, wie kann ich Zeile für Zeile mit einem Strom und Laravel schreiben?

Antwort

1
Storage::put('file.xml', $resource); 

Aber was wäre $ Ressource hier?

$ ressource sind Ihre Daten, die Sie vorbereiten, um durch Code auf Festplatte zu schreiben.

Wenn Sie die Datei mit einer Schleife zu schreiben, müssen Sie den Storage::append($file_name, $data); verwenden wie zuvor von ljubadr schrieb

I $ data geschrieben, aber Sie können einen beliebigen Namen für eine Variable in einer Schleife verwenden möchten.

0

Per Laravel 5.3 documentation, schauen Sie in Automatische Streaming

Wenn Sie Laravel automatisch möchten eine gegebene Datei auf Ihren Speicherplatz verwalten Streaming, können Sie die putFile oder putFileAs Methode verwenden. Diese Methode akzeptiert entweder eine Illuminate\Http\File oder Illuminate\Http\UploadedFile Instanz und wird automatisch die Datei auf Ihren Wunsch Standort streamen :

Sie können Datei hochladen mit Streaming-ähnlichen

$file = $request->file('file'); 
$path = \Storage::putFile('photos', $file); 

Wo Formular eingegeben wird

<input type="file" name="file"> 
+0

Wenn Sie eine Datei mit einem anderen Namen hochladen möchten, verwenden Sie 'putFileAs'. – ljubadr

+0

'$ file' ist eine Instanz von [UploadedFile] (https://laravel.com/api/5.3/Illuminate/Http/UploadedFile.html), so dass Sie dort nach verfügbaren Methoden suchen können. – ljubadr

+0

Laut meiner Frage bin ich Ich lade keine Datei hoch, und ich streame keine Datei in eine andere Datei. Ich versuche, eine Nur-Text-Datei zu schreiben, die ich in Code streamweise einbaute.Ich habe es geschafft, dies sehr einfach mit 'fopen' und' fwrite' zu ​​schreiben, würde aber die eingebauten 'Storage'-Methoden bevorzugen. Ich fange an zu denken, dass es nicht möglich ist. – Mike

Verwandte Themen