我正在寻找一种将示例文件分发给客户的方法。要求是上传文件(相对)简单,可以向客户发送链接,客户可以使用浏览器下载文件,但不能使用客户的链接查找其他文件
目前我使用 Dropbox 和脚本来实现这个功能,这些脚本会创建一个唯一的 Dropbox 文件夹并生成一个链接,例如http://dl.dropbox.com/u/1234/some_long_random_name/the_sameple_video.mov“而不是管理密码
无需加密内容,文件通常小于 1GB,我们预计每天只下载几次。我们不想将其托管在我们的网站上(不要问),我们希望服务能够持续一段时间,但数据存储在本地,因此 9-9 冗余不是问题
答案1
我将提供一个 S3 答案,因为它是您的标签之一。Amazon 的 S3 允许您设置文件权限,并创建带有到期时间的签名 URL。结合使用这两个想法,可以创建一个用作一次性 URL 的系统。此外,S3 有两个存储级别,因此如果冗余不是您的主要考虑因素,则可以使用减少冗余的存储来节省一点。但是,与所有 AWS 服务一样,您必须为使用的带宽付费。S3 还会对您的文件按请求收取费用。
与典型的 S3 实现(其中文件权限设置为公开)不同,这里您将权限设置为私有,并使用您的访问密钥进行签名以授予访问权限。
如果您不关心您的客户是否与他人共享链接或多次下载(只要他们无法访问任何其他文件),那么实现起来就非常简单,您只需使用签名 URL 创建一个(相当远的)未来到期日期。因此,例如,您将文件上传到 S3(默认情况下是私有的);创建一个有效期为一周的签名 URL;您的客户可以在下一周内使用提供的 URL 多次访问该文件。他们无法访问任何其他文件,因为他们没有签名的 URL - 并且所有文件都是私有的。
上述场景的问题在于时间 - 您不想让 URL 保持可用时间过长,但您需要为您的客户端提供足够的时间来访问该文件 - 它需要一些努力来验证您的客户端确实查看了该文件(即您将打开 S3 上的日志记录,并检查您的日志)。
替代方案需要在您的网站上进行部分实施,而不是完全依赖 S3。创建一个接受唯一 ID(存储在数据库中)的页面,并向您的客户端发送包含该 ID 的页面链接。当您的客户端访问该页面时,您会生成一个签名的 S3 URL,该 URL 将在不久的将来(30 秒)过期。(同时,您当然可以记录该 ID 不再有效并且您的客户端已访问该文件)。使用生成的 URL 启动下载。这样,客户端只能使用该 URL 一次 - 他们不能将其提供给其他人(尽管他们总是可以将文件本身提供给其他人),他们可以随时使用您通过电子邮件发送给他们的链接(因为该链接没有过期时间),并且由于您使用的是签名 URL,他们无法访问任何其他文件(即使他们猜出了路径/文件名)。
答案2
对于更适合非技术用户的东西我使用http://www.yousendit.com/。
它对于最大 50MB 的文件是免费的,并且任何人都可以轻松使用。