【问题标题】:How can I us JS to create a non-guessable random filename in a public directory?我如何让 JS 在公共目录中创建一个不可猜测的随机文件名?
【发布时间】:2016-11-17 13:04:23
【问题描述】:

我正在创建一个 JS/Node 程序,它允许公共信息亭的用户将图像保存到公共 AWS S3 bucket。然后他们输入他们自己的电子邮件地址,我们会向他们发送一封电子邮件,其中包含指向该图像的链接,以便他们回家后可以检索它。

整个 S3 存储桶需要公开,以便用户可以轻松查看自己的个人图像。但是,我想让访问者不太可能猜测另一个图像的文件名,查看另一个人的图像。这更多的是轻度隐私问题而不是安全问题。

如何使用JS随机生成字母数字文件名?文件名应该多长?

【问题讨论】:

  • 您可以使用全局唯一标识符作为文件名的一部分。在 SO 上搜索它。用于创建 GUID 的脚本有多个答案,小而长的脚本各有利弊
  • 谢谢。 GUID 正是我想要的。我不熟悉这个术语,现在我知道了,我看到了很多有用的答案。让我想知道我是否应该删除该问题或将其作为对该搜索词的参考,以供像我这样的其他无知的人使用...

标签: javascript node.js random amazon-s3 privacy


【解决方案1】:

我认为Math.random 会是一个不错的选择:

function getRandomName() {
  return parseInt((Math.random() * 10000000000000000000)).toString(36)
}

console.log(getRandomName());
console.log(getRandomName());
console.log(getRandomName());

【讨论】:

    【解决方案2】:

    1) 你真的不应该对文件名这样做。您最好为 S3 中过期的对象生成一个预签名的 url,例如几天,然后将 that 发送到他们的电子邮件。这样,文件对他们来说将是真正私有的,您不必将存储桶公开。

    在此处查看文档:http://docs.aws.amazon.com/AmazonS3/latest/dev/ShareObjectPreSignedURL.html

    2) 也就是说,如果您真的只想生成一个长随机字符串,那么使用 UUID 执行此操作的传统方式。您可以使用 node-uuid 包在 Node 中执行此操作。例如,require('node-uuid').v4(); 将生成一个随机 UUID。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-20
      • 2018-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多