You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过PHP脚本将Cloudinary文件/文件夹数据下载到EC2实例

结论

你当前使用的cloudinary/cloudinary_php包完全可以满足下载需求,不需要引入其他额外依赖。

具体实现步骤

1. 初始化Cloudinary客户端

你可以直接复用现有上传逻辑里的客户端初始化配置,Symfony环境下建议将Cloudinary密钥配置在.env文件中,初始化示例:

// Symfony中可以直接从环境变量读取配置初始化
Cloudinary::config([
    'cloud_name' => $_ENV['CLOUDINARY_CLOUD_NAME'],
    'api_key'    => $_ENV['CLOUDINARY_API_KEY'],
    'api_secret' => $_ENV['CLOUDINARY_API_SECRET'],
    'secure'     => true
]);

2. 单个文件下载

如果是公开资源可以直接拼接资源URL下载,私有资源可以调用包内置的签名下载链接生成方法,再写入EC2本地路径:

// 生成私有资源的有效下载链接,expires_at是链接有效期,单位秒
$downloadUrl = Cloudinary::private_download(
    '你的资源public_id',
    '资源格式(比如png、pdf)',
    ['expires_at' => time() + 300]
);

// 下载到EC2本地指定路径
$localPath = '/var/www/你的本地存储路径/目标文件名.格式';
file_put_contents($localPath, file_get_contents($downloadUrl));

3. 文件夹批量下载

需要先拉取指定文件夹下的所有资源列表,再循环执行单文件下载逻辑:

// 拉取指定前缀(对应Cloudinary文件夹路径)下的所有资源
$assets = $cloudinary->adminApi->assets([
    'prefix' => '你的Cloudinary文件夹路径/',
    'max_results' => 500 // 单次拉取最大数量,超过该值需要处理分页的next_cursor参数
]);

foreach ($assets['resources'] as $asset) {
    $downloadUrl = Cloudinary::private_download(
        $asset['public_id'],
        $asset['format'],
        ['expires_at' => time() + 300]
    );
    $localPath = '/var/www/本地文件夹路径/' . $asset['filename'] . '.' . $asset['format'];
    file_put_contents($localPath, file_get_contents($downloadUrl));
}
优化建议
  • 大文件下载建议使用流式处理,避免占用过高PHP内存,可以替换file_get_contents为Guzzle的sink参数或者PHP流操作实现。
  • 资源数量较多时注意处理Admin API的分页逻辑,通过返回结果中的next_cursor参数循环拉取全量资源。
  • Symfony环境下可以将Cloudinary客户端注册为容器服务,避免重复初始化,也可以复用框架的HTTP客户端组件完成下载操作。

内容的提问来源于stack exchange,提问作者Achraf El Khamsi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 22:24:05