- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我从未编写过任何云应用程序,所以我基本上是在研究以开始使用它。我在 Zend Framework 中开发,想使用云来存储媒体 Assets 。整个项目应该可以针对云进行扩展。想到这里,越来越多的问题涌上心头:
我想做的事情:
我将非常感谢有关如何处理此项目的提示;-]
最佳答案
我会推荐 Amazon S3,它也是我一直在其上开发的。我也会从 AWS S3 的角度回答你的问题。
How do I handle access rights to the assets? (Public should only be able to access them if the according article is released. )
当文件上传到 Amazon S3 时,您可以选择访问策略。您还可以为整个“存储桶”中的每个文件设置访问策略。存储桶是用于指代基于“云”的存储库的唯一名称。存储桶中的每个文件都由一个 key 访问。
例如,您上传一个名为 myAwesomeImage.jpg
的文件。现在,当您将该文件传输到 S3 时,您可以为该文件选择多个选项。
因此您可以选择将您的精彩图片放在名为 some/path/to/file
的“假目录”中。因此,您将为该对象创建一个“键”,以将其存储在“键”“some/path/to/file/myAwesomeImage.jpg”下。
你的桶可以存储数十亿个对象,你可以选择你想要的存储方式,你可以选择使用正斜杠创建文件夹,但它实际上并没有创建文件夹,它只是一个有用的他们可以在您的应用程序中使用的机制来表示文件的深度和组织。
现在,ACL
因此,当您上传对象时,您可以选择多个默认访问策略,也可以创建自己的访问策略。例如,如果您将对象上传为 ACL_PUBLIC
,则意味着任何人都可以访问它。
但是,如果您将其上传为 ACL_PRIVATE
,这意味着它是私有(private)的,只有文件的所有者才能访问它。
How do I keep track of all the assets? (Naming conventions? Create
a database to assign them to an article?)
所以你在这里有几个选择。您可以缓存所有内容以存储 Bucket 的本地状态,或者您可以不断检查 Amazon S3 API 以找出您拥有的文件。您将根据您的应用程序知道您需要哪些。
以我的情况为例...图片上传到我们公司的文件管理器,然后自动生成三个缩略图,然后也应用水印。这意味着每个图像可以生成至少 3 个图像,最多可达数百个(取决于我们需要应用多少不同的水印)。
在我们的情况下,我上周将 2 万张图片上传到 S3,然后将其导入到我们的文件管理器中。我必须存储我们在 S3 中的内容的本地表示,否则搜索和查询存储库需要很长时间。我对我们拥有哪些水印文件和缩略图也不感兴趣,但我确实需要确保它们已生成。将它们存储在本地意味着您可以执行所有这些操作。
这是我的 files
表的架构。 (但我还有另一个 files_dimensions)表也存储了我所有的维度。
CREATE TABLE `files` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`lft` int(11) NOT NULL,
`rgt` int(11) NOT NULL,
`name` varchar(64) NOT NULL,
`lastModified` date DEFAULT NULL,
`size` int(11) DEFAULT NULL,
`keyPath` varchar(255) DEFAULT NULL,
`root` int(11) DEFAULT NULL,
`type` varchar(11) DEFAULT NULL,
`mime` varchar(64) DEFAULT NULL,
`extension` varchar(11) DEFAULT NULL,
`s3Synced` tinyint(1) DEFAULT NULL,
`transferInProgress` tinyint(1) DEFAULT NULL,
`bytesTransfered` bigint(20) DEFAULT NULL,
`transferTotalTime` double DEFAULT NULL,
`transferAverageSpeed` bigint(20) DEFAULT NULL,
`amazonAcl` varchar(255) DEFAULT NULL,
`transferFailCount` smallint(6) DEFAULT NULL,
`transferFailMessage` varchar(255) DEFAULT NULL,
`owningProperty` bigint(20) DEFAULT NULL,
`bucketId` bigint(20) DEFAULT NULL,
`ownerId` bigint(20) DEFAULT NULL,
`md5Name` varchar(32) DEFAULT NULL,
`transferInitiated` date DEFAULT NULL,
`rrs` tinyint(1) DEFAULT NULL,
`etag` varchar(66) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `files_owningProperty_idx` (`owningProperty`),
KEY `files_bucketId_idx` (`bucketId`),
KEY `files_ownerId_idx` (`ownerId`),
CONSTRAINT `files_ibfk_1` FOREIGN KEY (`owningProperty`) REFERENCES `entities` (`id`) ON DELETE CASCADE,
CONSTRAINT `files_ibfk_3` FOREIGN KEY (`ownerId`) REFERENCES `acl_users` (`id`),
CONSTRAINT `files_ibfk_4` FOREIGN KEY (`bucketId`) REFERENCES `aws_buckets` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
How do I refer to them in zend framework? (Does it make sense to use a cdn like cloudfront? How to create urls?)
你会创建一个 View 助手,然后有类似 $view->createUrl( $file )
的东西,其中 $file 包含构建你的 URL 所需的一切。所以你会有你的对象路径,它是关键。
Can I keep my code generic to be able to switch from a local storage (at the beginning) to a cloud storage with the growth of the project?
不是真的。 Zend_Cloud 还没有完全开发。 Zend_Cloud 的想法是它可以与任何云存储适配器互换,但它还没有准备好。
How do I optimize my assets for different devices/screen sizes? Can I still have only one source?
我创建了不同大小的所有对象。然后我将其附加为/123123123/large.jpg/123123123/medium.jpg
http://i.stack.imgur.com/AkT0B.jpg
关于php - 采埃孚媒体 Assets 如何实现云存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6943074/
一般来说,我是 ARM 和 Linux 的新手,但我已经设置了 eclipse 来对我的 beaglebone black(running angstrom)进行编程。我想处理一个图像(本地文件),然
我有一个 BeagleBone - 没有 LCD/显示器。当我尝试使用 startx 时,控制台显示/dev/fb0 不存在。 xorg.conf 文件正在使用 fbdev 驱动程序。显然,如果检测到
我正在使用 Angstrom Linux 发行版在 Beaglebone 板上开发应用程序。我倾向于将根文件系统挂载为只读,因为它在断电后的可读/可写配置上不可靠。 您能否就如何将根文件系统挂载为只读
我正在 BeagleBoneBlack 上开发应用程序。嵌入式 linux 对我来说很新 =/ 我面临的问题是,我想实现一个RS485通讯,我使用 SeriaLib-Library 编写了一段 C++
我是一名优秀的程序员,十分优秀!