拉拉维尔 - 如何从古兹尔保存二进制文件



我需要帮助,我使用以下代码请求文件:

$client = new Client(['verify' => false]);
$response = $client->request('GET', 'https://url', [
    'headers' => [
        'Authorization' => 'Bearer token'
    ]
]);
$mime = $response->getHeader('Content-Type');
$binary = $response->getBody();

我得到的答案如下:

Content-Type: image/jpeg or other appropriate media type
Content-Length: content-size
binary-media-data

我的问题是:如何存储此文件?我在互联网上找不到任何东西...

使用存储外观创建新文件。

Storage::put('file.jpg', $binary)

如果 Mime 类型可以更改,则获取文件,然后使用 PutFile:

use IlluminateHttpFile;
use IlluminateSupportFacadesStorage;
$client = new Client(['verify' => false]);
$tmpfile = tempnam(sys_get_temp_dir(),'dl');
$response = $client->request('GET', $url, [
    'headers' => [
        'Authorization' => 'Bearer token'
    ],
    'sink' => $tmpfile
]);
$filename = Storage::putFile('dir_within_storage', new File($tmpfile));

如果文件名始终可靠并且您不担心重复,那么您可以直接使用 Guzzle 将其放入:

$client = new Client(['verify' => false]);
$filePath = basename($url);
$response = $client->request('GET', $url, [
    'headers' => [
        'Authorization' => 'Bearer token'
    ],
    'sink' => storage_path('dir_within_storage/'.$filePath)
]);

最新更新