微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ruby-on-rails – Rails:允许用户将图像上传到Dropbox链接文件夹或Amazon S3上的“我们的”存储的最佳方式

我正在开发一个用户加入“流”的项目.在流设置期间,创建流的人(流创建者)可以选择:

>将成员添加到流中的所有照片上传到我们的托管解决方案(S3)
>将成员添加到流中的所有照片上传到流创建者自己的DropBox身份验证文件

在未来我想添加更多存储提供商(如Drive,Onesky等)

关于如何解决这个问题,我有几个不同的问题.

>照片数据库中的结构应该是什么?我目前只有photo_url,但从数据的角度来看,使用预先签名的网址并且有不同的方式可以上传照片(s3,dropBox等),这是不容易的.
>如何存储每个存储提供程序的访问令牌?请记住,只会存储流创建者的access_token,并且流上的所有人都会在上传照片时共享该令牌
>我将在未来添加iOS和Web客户端,直接上传到存储提供商并绕过服务器以避免服务器负载过重

解决方法

数据库存储而言,您的应用程序应根据您向用户和流提供的接口来指定结构.
如果您有用户上传照片并且他们无法选择URI,并且您在流中没有任何层次结构,那么我建议您在主照片表中仅存储ID和stream_id.

所以至少你可能会有类似的东西

create table photos(id integer primary key,stream_id integer references streams(id) not null);

但您可能还需要与存储无关的描述和其他信息.

流表将具有关于流的所有通用信息,但是具有依赖于流的类型的类的polymorphic association.因此,您可以根据使用的实际流来使用该关联来获取S3Stream或DropBoxStream的实例.
该实例(也是ActiveRecord资源)可以存储访问密钥,以及诸如dropBox之类的东西,文件夹的路径等.此外,该实例可以提供在给定Photo对象的情况下构造URI的方法.
如果特定技术需要缓存签名的URI,那么说S3Stream对象可以引用URI签名的S3SignedUrl模型.
如果事实证明DropBox和S3之间的签名URL代码相似,那么您可能只有一个SignedUrl模型.

当您设计ios和Android客户端时,关键是他们无权访问流所有者的访问令牌.相反,您需要在服务器应用程序内进行所有签名.您不希望设备受损导致暴露访问令牌,从而产生计费问题以及隐私泄露.希望这可以帮助.

原文地址:https://www.jb51.cc/ruby/270104.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐