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

如何用Elixir的ex_aws库在AWS S3中移动指定文件?

如何用ExAws实现AWS S3文件移动?

当然可以!不过得先明确一点:AWS S3本身没有原生的「移动」操作——所谓的移动其实是先复制文件到目标位置,再删除原文件的组合操作,而ExAws完全能帮你实现这个流程。

实现步骤

  1. 确认ExAws配置
    首先确保你已经在项目中配置好了ExAws的S3客户端,比如在config.exs中添加:
config :ex_aws, :s3,
  access_key_id: System.get_env("AWS_ACCESS_KEY_ID"),
  secret_access_key: System.get_env("AWS_SECRET_ACCESS_KEY"),
  region: "你的AWS区域,比如us-east-1"
  1. 编写移动函数
    核心逻辑是先复制对象到目标路径,确认复制成功后再删除原文件(避免复制失败导致数据丢失):
def move_s3_object(bucket_name, source_key, target_key) do
  # 第一步:执行复制操作
  copy_request = ExAws.S3.copy_object(bucket_name, target_key, {bucket_name, source_key})

  case ExAws.request(copy_request) do
    {:ok, _response} ->
      # 复制成功后,删除原文件
      delete_request = ExAws.S3.delete_object(bucket_name, source_key)
      ExAws.request(delete_request)

    error ->
      # 复制失败,直接返回错误信息
      error
  end
end
  1. 调用函数完成移动
    针对你的具体需求,调用上面的函数即可:
# 替换成你的存储桶名称
bucket = "your-bucket-name"
# 原文件键
source_key = "in/c05cf611db4b4a72a8a254fcf4355fb7-sample1.csv"
# 目标文件键
target_key = "archieve_in/c05cf611db4b4a72a8a254fcf4355fb7-sample1.csv"

case move_s3_object(bucket, source_key, target_key) do
  {:ok, _} -> IO.puts("文件移动成功!")
  {:error, reason} -> IO.puts("移动失败:#{inspect(reason)}")
end

注意事项

  • 权限要求:确保你的AWS凭证拥有该存储桶的s3:PutObject(复制操作本质是写入目标对象)和s3:DeleteObject权限。
  • 一致性保障:复制和删除是两个独立的API操作,如果中间出现故障,可能会同时存在两份文件。如果需要更严格的一致性,可以在复制后先验证目标对象存在,再执行删除;或者开启S3版本控制,防止误删。
  • 批量操作:如果需要移动多个文件,可以结合ExAws的批量请求功能,但单个文件的场景下,上面的代码就足够简洁可靠了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:34:23