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
相关产品推荐
相关产品推荐

