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

如何通过AWS CLI将预签名URL的文件复制到自有S3存储桶?

可行方案:无需本地下载,直接流式复制

不需要先把文件下载到本地,你可以通过AWS SDK流式处理或CLI管道命令实现直接复制,全程不落地文件到本地磁盘。以下是具体实现方式:

方法1:用Python boto3 + requests实现流式复制

这种方式适合需要自动化或处理大文件的场景,通过流传输直接将预签名URL的文件内容传到自己的S3桶:

import boto3
import requests

# 替换为实际参数
presigned_url = "供应商提供的预签名HTTPS URL"
your_bucket = "你的S3存储桶名称"
target_file_key = "要保存的文件路径(如:backup/data.csv)"

# 初始化S3客户端
s3_client = boto3.client('s3')

# 获取预签名URL的文件流
with requests.get(presigned_url, stream=True) as res:
    res.raise_for_status()  # 确保请求成功
    # 直接将流上传到自己的S3桶
    s3_client.upload_fileobj(res.raw, your_bucket, target_file_key)

方法2:用CLI管道快速实现(适合小文件)

如果不想写代码,可通过curl获取文件内容,再用管道直接传给AWS CLI的s3 cp命令,全程无本地文件:

curl -L "供应商的预签名URL" | aws s3 cp - s3://你的存储桶名称/目标文件名

为什么之前的尝试会报错?

你把预签名URL改成s3://格式后出现错误,原因在于:

  • AWS CLI的s3 sync/cp命令使用s3://路径时,要求你的AWS账号对供应商的存储桶有直接访问权限(如s3:GetObject权限),但供应商仅提供了预签名URL,并未给你账号授权,所以会触发Access Denied。
  • Bad Request错误通常是因为你构造的s3://路径有误(比如桶名、对象键写错),或者供应商的存储桶不允许直接通过s3://协议访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 16:51:37