【问题标题】:upload file api with uploadtask in symfony 2.8在 symfony 2.8 中使用 uploadtask 上传文件 api
【发布时间】:2019-05-02 10:36:27
【问题描述】:

我们意识到,如果我们想要生成一个包含 15GB 视频文件的多部分查询,那么在内存中分配如此大量数据所需的大小是不可能的,大多数设备只有 2 或 3GB 的 RAM。

因此,绝对有必要切换到uploadTask 方法,该方法会将块文件的内容推送到服务器,该块文件的大小是发送到服务器的IP 数据包所允许的最大大小。

这是一个 POST 方法。但是,它不包含文件夹 id 或文件名等参数。所以你需要一种方法来传输这些参数。最好的方法是在 URL 中编码。

我提出了API端点后面的路径形式的编码格式,但是我们也可以很好地将这两个参数在URL中以经典的方式编码,例如:

/api/upload?id=123&filename=video.mp4

根据我在 Stackoverflow 上阅读的内容,使用 Symfony 检索 id 和文件名是微不足道的。然后可以将 POST 请求正文中接收到的所有数据以原始方式直接写入文件,而无需通过服务器端内存中的缓冲区。

无论是移动端还是服务器端,无论是上传还是下载,都必须流式传输用户数据。在安全性方面,将用户内容加载到内存中也是非常危险的。

在 symfony 中,我该怎么做?

【问题讨论】:

    标签: symfony symfony-2.8 nsurlsessionuploadtask


    【解决方案1】:

    这超出了 Symfony 的范围,取决于您使用的 Web 服务器。

    默认情况下,使用 apache/nginx 和 php,您将收到一个已经缓冲的请求,因此您无法将其流式传输到文件。

    但是,有一些解决方案,例如使用 Apache,您可以流式传输请求,请参阅 http://hc.apache.org/httpclient-3.x/performance.html#Request_Response_entity_streaming

    可能 nginx 也有它的选项,但我不知道这些。

    另一个选项可能是 websockets,请参阅http://en.wikipedia.org/wiki/WebSocket

    【讨论】:

      猜你喜欢
      • 2016-05-10
      • 2016-04-18
      • 1970-01-01
      • 2016-05-21
      • 1970-01-01
      • 1970-01-01
      • 2010-12-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多