【问题标题】:Node.js+AWS S3: Upload new file and create a new folder if doesn't existNode.js+AWS S3:上传新文件,如果不存在则创建一个新文件夹
【发布时间】:2020-04-20 04:14:59
【问题描述】:

我能够将文件上传到 AWS S3。

但是,假设我已使用密钥将文件上传到我的存储桶:myfolder\filename.pdf

它不会创建文件夹myfolder,S3 中新文件的名称(下载时也是如此)是myfolder_filename.pdf(它用下划线替换反斜杠)。

我的问题是: 1. 如何确定下载文件的名称? 2. 我如何告诉 AWS 我希望它创建新文件夹?也许下载的文件名只是filename.pdf

也许问题是我使用了反斜杠而不是前斜杠? (我使用了 path.join)

谢谢!

【问题讨论】:

  • S3 中没有“文件夹”的概念。来自文档:“在 Amazon S3 中,存储桶和对象是主要资源,对象存储在存储桶中。Amazon S3 具有平面结构,而不是像您在文件系统中看到的层次结构。但是,为了组织简单, Amazon S3 控制台支持文件夹概念作为对对象进行分组的一种方式。Amazon S3 通过为对象使用共享名称前缀来实现这一点(即,对象的名称以通用字符串开头)。对象名称也称为键名。”
  • 这很糟糕,因为当我下载文件时,我得到了整个对象路径。如果没有文件夹,我该如何解决这个问题? (顺便说一句,在 S3 面板中,有一个“创建文件夹”按钮实际上创建了一个文件夹。我希望每个用户都有自己的“空间”/“文件夹”。

标签: node.js amazon-s3


【解决方案1】:

理想情况下,您必须在 AWS sdk S3 调用中为“密钥”属性发送“文件夹/文件名”。如果文件夹不存在,S3 将根据您发送的密钥创建该文件夹。

您必须将密钥作为 "myfolder/filename.pdf" 传递。斜线应该是“/”

【讨论】:

  • 代码不是这里的问题。这是一个 AWS S3 问题。见@Victor 回答
  • 唯一需要添加的是 S3 键中的“/”而不是“\”
  • 你一定是在开玩笑吧......因为我想“也许问题是我使用了反斜杠而不是前斜杠?(我使用了 path.join)”。但是 path.join 放反斜杠,最好的方法是什么?
  • 我不是在开玩笑。试图帮助你
  • 那么最好的方法是什么? path.join 放反斜杠
猜你喜欢
  • 2011-02-19
  • 2011-01-19
  • 2013-09-18
  • 2014-09-07
  • 1970-01-01
  • 2015-08-31
  • 2022-11-03
  • 1970-01-01
相关资源
最近更新 更多