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

如何使用AWS SDK实现Amazon S3文件下载及上传后的删除操作

AWS SDK 操作S3删除对象对应场景解决方案
  • 操作前请确认调用SDK的身份(IAM用户/角色/实例配置文件等)已配置对应S3桶的s3:DeleteObject权限,下载场景还需额外配置s3:GetObject权限
  • 所有操作都建议增加异常捕获逻辑,仅在前置操作(下载/上传)成功执行后再调用删除接口,避免误删数据

场景1:通过AWS SDK下载S3文件后删除对应源文件

以下提供两种常用开发语言的实现示例:

Python(boto3)示例

import boto3
from botocore.exceptions import ClientError

s3 = boto3.client('s3')
bucket_name = "你的桶名"
object_key = "要操作的S3对象路径"
local_save_path = "本地保存路径"

try:
    # 先执行下载操作
    s3.download_file(bucket_name, object_key, local_save_path)
    # 下载成功后执行删除
    s3.delete_object(Bucket=bucket_name, Key=object_key)
    print("文件下载并删除成功")
except ClientError as e:
    print(f"操作失败: {e.response['Error']['Message']}")

Node.js(aws-sdk v3)示例

const { S3Client, GetObjectCommand, DeleteObjectCommand } = require("@aws-sdk/client-s3");
const fs = require('fs');
const { pipeline } = require('stream/promises');

const s3Client = new S3Client({ region: "你的桶区域" });
const bucketName = "你的桶名";
const objectKey = "要操作的S3对象路径";
const localSavePath = "本地保存路径";

const downloadAndDelete = async () => {
  try {
    // 执行下载
    const getCommand = new GetObjectCommand({ Bucket: bucketName, Key: objectKey });
    const response = await s3Client.send(getCommand);
    await pipeline(response.Body, fs.createWriteStream(localSavePath));
    // 下载成功后删除
    const deleteCommand = new DeleteObjectCommand({ Bucket: bucketName, Key: objectKey });
    await s3Client.send(deleteCommand);
    console.log("文件下载并删除成功");
  } catch (err) {
    console.error("操作失败:", err);
  }
};

downloadAndDelete();

场景2:上传操作完成后删除S3对应文件

上传操作完成后你已经明确知道上传对象的桶名、对象key,直接调用删除接口即可,也可以先调用head接口确认对象存在再执行删除,避免报错:

Python(boto3)示例

import boto3
from botocore.exceptions import ClientError

s3 = boto3.client('s3')
bucket_name = "你的桶名"
# 该参数为上传时指定的S3对象路径
uploaded_object_key = "已上传的S3对象路径"

try:
    # 可选:先确认对象存在
    s3.head_object(Bucket=bucket_name, Key=uploaded_object_key)
    # 执行删除
    s3.delete_object(Bucket=bucket_name, Key=uploaded_object_key)
    print("上传文件删除成功")
except ClientError as e:
    if e.response['Error']['Code'] == '404':
        print("要删除的对象不存在")
    else:
        print(f"删除失败: {e.response['Error']['Message']}")

Node.js(aws-sdk v3)示例

const { S3Client, HeadObjectCommand, DeleteObjectCommand } = require("@aws-sdk/client-s3");

const s3Client = new S3Client({ region: "你的桶区域" });
const bucketName = "你的桶名";
const uploadedObjectKey = "已上传的S3对象路径";

const deleteUploadedFile = async () => {
  try {
    // 可选:确认对象存在
    await s3Client.send(new HeadObjectCommand({ Bucket: bucketName, Key: uploadedObjectKey }));
    // 执行删除
    await s3Client.send(new DeleteObjectCommand({ Bucket: bucketName, Key: uploadedObjectKey }));
    console.log("上传文件删除成功");
  } catch (err) {
    if (err.$metadata.httpStatusCode === 404) {
      console.log("要删除的对象不存在");
    } else {
      console.error("删除失败:", err);
    }
  }
};

deleteUploadedFile();

如果需要批量删除对象,可以调用S3的delete_objects接口,一次最多可删除1000个对象,减少请求次数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:15:04