如何通过Angular将文件上传至AWS S3的指定路径格式(非子域名形式)
Angular上传AWS S3时使用路径式域名而非子域名格式的解决方法
你需要的是AWS S3的路径风格访问格式(https://s3.amazonaws.com/bucket-name/object-key),而默认的SDK配置会使用虚拟主机风格(https://bucket-name.s3.amazonaws.com/object-key)。要实现这个需求,只需要在初始化S3客户端时添加一个关键配置项即可。
具体修改步骤:
在创建S3实例的配置对象中,加入s3ForcePathStyle: true参数,强制SDK使用路径风格的URL生成规则。
修改后的上传方法代码如下:
uploadfile(file) { const bucket = new S3( { accessKeyId: 'my-ACCESS-KEY-ID', secretAccessKey: 'my-SECRET-ACCESS-KEY', region: 'my_region', s3ForcePathStyle: true // 新增这个配置项 } ); const params = { Bucket: 'my_bucket_name', Key: this.FOLDER + file.name, Body: file }; bucket.upload(params, function (err, data) { if (err) { console.log('There was an error uploading your file: ', err); return false; } console.log('Successfully uploaded file.', data); return true; }); }
补充说明:
- 这个配置项会让SDK在生成上传和访问URL时,始终使用
s3.amazonaws.com作为主域名,bucket名称作为路径的一部分。 - 需要确保你的S3桶名称符合路径风格访问的要求(比如不能包含特殊字符导致路径解析问题),不过大多数常规命名的桶都可以正常使用。
内容的提问来源于stack exchange,提问作者Humble Dolt
相关产品推荐
相关产品推荐

