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

PHP AWS S3 SDK:如何生成预签名URL上传文件至存储桶文件夹

如何在AWS S3预签名上传URL中指定“文件夹”

嗨,其实这个问题的核心是理解AWS S3的存储逻辑——S3并没有真正的文件夹概念,所有文件(对象)都是扁平存储的,所谓的文件夹只是通过对象键(Key)中的路径前缀(用斜杠/分隔)模拟出来的层级结构。

回到你的代码,只需要把想要的“文件夹”路径直接拼到Key参数的值里就行,也就是你定义的$object变量中。

修改后的代码示例

// 直接在对象Key中加入文件夹路径,比如要上传到"uploads/profile/"下
$object = 'uploads/profile/test_103.jpg';
$bucket = $config['s3_input']['bucket'];
$expiry = new DateTime('+10 minutes');
$command = $s3_input->getCommand(
    'PutObject',
    [
        'Bucket' => $bucket,
        'Key' => $object // 这里的Key已经包含了文件夹路径前缀
    ]
);
$signedRequest = $s3_input->createPresignedRequest($command,'+10 minutes');
$signedUploadUrl = $signedRequest->getUri();
echo $signedUploadUrl;

动态指定文件夹的方式

如果你的文件夹名称是动态生成的(比如按日期、用户ID划分),可以用变量拼接的方式:

$folderPrefix = 'user_uploads/' . $_SESSION['user_id'] . '/';
$fileName = 'test_103.jpg';
$object = $folderPrefix . $fileName; // 最终Key会是类似"user_uploads/123/test_103.jpg"

当你用这个预签名URL完成上传后,在AWS S3控制台里就会看到对应的层级结构,和你熟悉的文件夹展示完全一致。

内容的提问来源于stack exchange,提问作者Sagar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:25:16