编程

使用 Laravel 的 HTTP "sink" 方法轻松下载文件

17 2025-04-21 22:52:00

需要下载带有 HTTP 请求的文件吗?Laravel 的 sink 方法提供了一种简洁的方法,可以用最少的代码将 HTTP 响应直接保存到文件中。

基础用法

将 HTTP responses 直接保存到文件:

Http::sink(storage_path('download.zip'))
    ->get('https://example.com/example-file.zip');

真实示例

以下是如何在下载管理器中使用它:

class DownloadManager
{
    public function downloadFile(string $url, string $filename)
    {
        return Http::sink(storage_path("downloads/{$filename}"))
            ->withHeaders([
                'User-Agent' => 'MyApp/1.0',
                'Accept' => '*/*'
            ])
            ->get($url);
    }

    public function downloadBackup(string $backupUrl, string $apiKey)
    {
        $timestamp = now()->format('Y-m-d-His');
        
        return Http::sink(storage_path("backups/backup-{$timestamp}.zip"))
            ->withToken($apiKey)
            ->get($backupUrl);
    }

    public function downloadReportAsCsv(string $reportUrl)
    {
        return Http::sink(
            storage_path('reports/latest.csv'),
            withHeaders([
                'Accept' => 'text/csv'
            ])
        )->get($reportUrl);
    }
}

sink 方法通过为你处理文件写入过程简化了文件下载。