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

如何在React中删除AWS S3存储桶中的文件夹及其内部对象?

解决AWS Amplify删除S3“文件夹”无效的问题

S3里根本没有真正的文件夹,所谓的“文件夹”只是对象键的前缀。比如你能删掉Car-Models/Cadillac-Image,是因为它是一个实际存在的对象;但直接删Car-Models不行,因为它不是一个可被删除的对象——控制台显示的文件夹只是S3根据键前缀生成的视觉效果,除非你手动创建过一个键为Car-Models/的空对象(作为文件夹占位符)。

要删除整个“文件夹”,得先删掉该前缀下的所有对象,再清理可能存在的占位对象,代码示例如下:

import { Amplify, Storage } from 'aws-amplify';

async function deleteFolder(folderPrefix) {
  try {
    // 列出目标前缀下的所有对象
    const allItems = await Storage.list(folderPrefix, { level: "public" });
    
    // 批量删除所有对象
    await Promise.all(
      allItems.map(item => Storage.remove(item.key, { level: "public" }))
    );
    
    // 处理文件夹占位对象(如果存在)
    const placeholderKey = folderPrefix.endsWith('/') ? folderPrefix : `${folderPrefix}/`;
    try {
      await Storage.remove(placeholderKey, { level: "public" });
    } catch (err) {
      // 占位对象不存在就跳过,不用管
      console.log('无文件夹占位对象需要删除');
    }
    
    alert('文件夹及内部所有内容已删除');
  } catch (err) {
    console.error('删除文件夹出错:', err);
    alert('删除文件夹失败');
  }
}

// 调用函数删除Car-Models
deleteFolder('Car-Models');

代码说明

  • 先用Storage.list获取Car-Models前缀下的所有文件和子文件夹里的对象
  • 用Promise.all并行删除所有对象,提升效率
  • 最后尝试删除Car-Models/这个占位对象——如果之前没手动创建过,这一步会报错,直接忽略就行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 11:15:39