php - Laravel - 如何从 Guzzle 中保存二进制文件
问题描述
我需要帮助,我使用以下代码请求文件:
$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 门面创建一个新文件。
Storage::put('file.jpg', $binary)
如果 Mime 类型可以更改,则获取文件,然后使用 PutFile:
use Illuminate\Http\File;
use Illuminate\Support\Facades\Storage;
$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)
]);
推荐阅读
- vue.js - 如何重置与 vue-show 一起使用的 vue 模态组件以使用自动对焦
- android - 是否可以获取用户从回收视图中选择的帖子的 UID?
- react-native - 从 api 获得响应后更新 redux-thunk 中的局部变量的最佳实践是什么?
- c - 添加功能不是任何新节点或显示功能仅显示第一个节点信息
- php - 如何在 Sage 中创建带有博客文章的静态首页?
- python - 熊猫绘制直方图
- flutter - 使飞镖代码在设备重启时运行颤动
- android - 从谷歌Play商店下载应用程序后崩溃?
- python-3.x - 使用 python 执行 powershell 命令
- sql - 插入多个行 ID 的 SQL 服务器保持不变