laravel5.3 генерирует загрузку (.txt) на лету

Какой лучший способ создать загрузку (в моем случае .txt файл) на лету? Под этим я подразумеваю, прежде чем сохранять файл на сервере. Для понимания вот что мне нужно сделать:

public function getDesktopDownload(Request $request){

$txt = "Logs ";

//offer the content of txt as a download (logs.txt)
$headers = ['Content-type' => 'text/plain', 'Content-Disposition' => sprintf('attachment; filename="test.txt"'), 'Content-Length' => sizeof($txt)];

return Response::make($txt, 200, $headers);
}

2

Решение

Попробуй это

public function getDownload(Request $request) {
// prepare content
$logs = Log::all();
$content = "Logs \n";
foreach ($logs as $log) {
$content .= $logs->id;
$content .= "\n";
}

// file name that will be used in the download
$fileName = "logs.txt";

// use headers in order to generate the download
$headers = [
'Content-type' => 'text/plain',
'Content-Disposition' => sprintf('attachment; filename="%s"', $fileName),
'Content-Length' => sizeof($content)
];

// make a response, with the content, a 200 response code and the headers
return Response::make($content, 200, $headers);
}
4

Другие решения

Вы можете использовать потоковый ответ для отправки содержимого в виде файла загрузки

Какой лучший способ создать загрузку (в моем случае .txt файл) на лету? Под этим я подразумеваю, прежде чем сохранять файл на сервере. Для понимания вот что мне нужно сделать:

use Symfony\Component\HttpFoundation\ResponseHeaderBag;
use Symfony\Component\HttpFoundation\StreamedResponse;

используйте вышеупомянутые классы наверху, затем подготовьте контент

$logs = Log::all();

$txt = "Logs \n";foreach ($logs as $log) {
$txt .= $logs->id;
$txt .= "\n";
}

затем отправить поток контента в качестве загрузки

$response = new StreamedResponse();
$response->setCallBack(function () use($txt) {
echo $txt;
});
$disposition = $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, 'logs.txt');
$response->headers->set('Content-Disposition', $disposition);

return $response;
3

По вопросам рекламы [email protected]