2017-10-17 14 views
9

我想用Storage::put寫一個文件。該文件可能非常大(> 100MB),所以我想利用流,所以我不會盲目地將所有內容放入內存中。如何使用資源逐行寫入,但仍使用Laravel的內置存儲?

我將要做出多個API請求,然後遍歷它們的結果,因此我將回來的數據不是問題,它將被限制爲合理的數量。

按照documentation,我需要使用:

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

但是會$resource在這裏?

傳統上,當使用PHP編寫文件時,我已經使用fopen,fwritefclose的組合來完成它,以便「逐行寫入」。我正在通過循環遍歷各種集合並使用各種AP​​I來構建文件,因此$resource而不是文檔指針或文件引用是在文檔中的其他地方討論的。

那麼,我該如何使用流和Laravel的Storage一行一行的寫?

回答

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

但是$資源會在這裏?

$ resource是您準備通過代碼寫入磁盤的數據。

如果你想要寫一個循環的文件必須使用Storage::append($file_name, $data);由ljubadr以前寫

我寫$的數據,但你可以使用任何你想要的名稱在一個循環內的變量。

0

Laravel 5.3 documentation,看看自動流

如果您想Laravel自動管理流給定 文件到您的存儲位置,您可以使用putFileputFileAs 方法。這個方法可以接受一個Illuminate\Http\FileIlluminate\Http\UploadedFile實例,並自動將文件流 你的願望的位置:

您可以上傳文件,流媒體這樣的

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

如果你的表單輸入是

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

如果要上傳不同名稱的文件,請使用'putFileAs'。 – ljubadr

+0

'$ file'是[UploadedFile]的實例(https://laravel.com/api/5.3/Illuminate/Http/UploadedFile.html),所以你可以在那裏尋找可用的方法 – ljubadr

+0

根據我的問題,我是沒有上傳文件,我沒有將文件流式傳輸到其他文件。我正在嘗試編寫一個純文本文件,我正在以流媒體的方式構建代碼。我已經設法使用'fopen'和'fwrite'非常輕鬆地編寫它,但是更喜歡內置的'Storage'方法。我開始認爲這是不可能的。 – Mike

相關問題