如何使用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
相关产品推荐
相关产品推荐

