Php 在Symfony中下载安全文件的有效方法

Php 在Symfony中下载安全文件的有效方法,php,symfony,download,Php,Symfony,Download,我有一个Symfony项目,它为移动应用程序提供了一个通过API获取带有图像的文章的可能性。API是安全的,并返回文章列表。文章的一个细节是照片存储在文档根目录之外,因此无法从web浏览器访问。照片uri是指向Symfony控制器的链接,该控制器检查登录用户是否可以下载文件。如果是,请使用标题返回图像 API如下所示: [ { "id": 7, "title": "Test", "photo": "https://mypage.com/us

我有一个Symfony项目,它为移动应用程序提供了一个通过API获取带有图像的文章的可能性。API是安全的,并返回文章列表。文章的一个细节是照片存储在文档根目录之外,因此无法从web浏览器访问。照片uri是指向Symfony控制器的链接,该控制器检查登录用户是否可以下载文件。如果是,请使用标题返回图像

API如下所示:

[
    {
        "id": 7,
        "title": "Test",
        "photo": "https://mypage.com/user/files/ewr23r23",
        "version: 2,
        "status": "n"
    },  
    {
        "id": 9,
        "title": "Foo",
        "photo": "https://mypage.com/user/files/h24t54ef",
        "version: 4,
        "status": "m"
    }
]
因此,移动应用程序通过API请求aricles(1个请求)。然后下载照片。因此,如果我们有10篇文章,我们有11个请求。照片10张,API 1张。你知道有什么解决方案可以优化这一点吗?减少要求?
我们使用版本控制,因此移动应用程序仅通过API下载更改,而不是整个文章列表。

由于移动应用程序可以访问您的API,您可以使用PHP
ZIP
extension()将所有图像捆绑到一个ZIP文件中,然后下载并与客户端应用程序一起解压缩


在我看来,最好的方法是实现一个控制器,它将图像列表作为参数并返回zip文件。我们可能可以缓存这些文件(在客户端和服务器端),以节省一点处理能力。

如果我们有一个静态文章列表,这将是一个不错的选择。但是我们正在对它进行版本控制,所以我们不会每次都下载所有的文章。我已经更新了与此相关的问题。您完全可以使用一个控制器“动态”捆绑文件,该控制器以文件列表为参数,但您必须决定是优化请求数量还是优化服务器负载,因为这种操作很快就会变得昂贵。我不知道整盏灯哪一个更贵。5个API请求(加载Symfony,使用条令查询检查凭据)和4个图像或1个请求和zip 5文件。100张图片怎么样。我甚至不知道如何检查它。如果你的图像足够静态,客户端缓存是一件好事,但老实说,试图减少请求的数量会适得其反,一个简单的文件请求对服务器来说什么都不是,而捆绑和压缩是一件大事