【问题标题】:Filepicker? Upload big files via HTML5 to S3 with no backend文件选择器?通过 HTML5 将大文件上传到 S3,无需后端
【发布时间】:2015-11-18 08:43:48
【问题描述】:

使用 multipart/form-data 上传文件非常简单,并且在您开始专注于大文件上传之前大部分时间都运行良好。如果我们look closely 在文件上传期间会发生什么:

  • 客户端发送 POST 请求,其中包含 BODY 中的文件内容

  • webserver 接受请求并启动数据传输(如果文件大小超过限制,则返回错误 413)

  • webserver 开始填充缓冲区(取决于文件和缓冲区大小),将其存储在磁盘上并通过套接字/网络发送到后端

  • 后端验证身份验证(文件上传后查看)

  • 后端读取文件并剪掉几个头Content-Disposition,Content-Type,再次存储到磁盘上 后端执行您需要对文件执行的所有操作

为了避免这种开销,我们将文件转储到磁盘(Nginx client_body_in_file_only)并管理回调以进一步发送。然后队列工作人员拿起文件并执行所需的操作。它适用于非常流畅的服务器间通信,但我们必须解决客户端上传的类似问题。

我们还有客户端 S3 上传解决方案。没有后端交互发生。对于视频上传,我们使用 Zencoder 管理视频以转换为 h.264 Baseline / AAC 格式。

目前我们使用基于s3-swf-upload-plugin的修改过的Flash上​​传器,结合Zencoder JS SDK,效率很高但使用了Flash。

问题。如何使用 HTML5 文件上传器达到相同的目标? Filepicker.io and Zencoder 解决问题了吗?在没有后端交互的情况下管理 HTML5 文件上传的推荐方法是什么?

要求如下:

  • HTML5,非 Flash
  • 上传经过后处理的视频,使其与 HTML5 播放器和移动设备兼容
  • 通过后处理(调整大小、裁剪、旋转)上传图片
  • 使用预览功能上传 PDF 等文档

https://www.filepicker.com 做得好吗?

【问题讨论】:

  • 我必须进行更多研究,但client_body_in_file_only 不会导致更多磁盘访问并因此降低性能吗? Nginx 文档说它应该主要用于调试。
  • @aergistal 不,它在我们的生产中工作了很多年,一切都很完美。我与 Nginx 核心团队的开发人员进行了交谈,他们确认它对于生产工作负载非常稳定。

标签: javascript html amazon-s3 upload filepicker.io


【解决方案1】:

我使用 filepicker 已经 2 年了,毫无疑问它物有所值。不要尝试管理文件上传(从谷歌驱动器,从 ios,从我的相机,从保管箱......) Filepicker 处理得很好,并为您提供一个现成的 url。花更多时间在您的核心业务上,文件上传真的很容易委派

【讨论】:

    【解决方案2】:

    要将大文件上传到 S3,有一个 REST API for Multipart Upload,其工作方式如下

    1. 开始上传
    2. 上传文件内容分成多个请求
    3. 完成上传

    API 也可用于从 javascript 调用,上传的文件可以使用 File/Blob slice API 拆分为多个请求

    唯一的问题是,为了能够从 javascript 向 S3 进行身份验证,您需要传递您的身份验证详细信息。这通常由 PHP 等中间层解决,因此身份验证详细信息不会存储在 javascript 文件中。

    关于 SO 的类似问题:HTML5 and Amazon S3 Multi-Part uploads

    编辑

    • 裁剪和调整大小等图像操作可以通过画布完成。只需将本地图片加载到 canvas 元素中,进行所需的编辑,然后您就可以使用canvas.toDataUrl 方法生成 jpeg/png 图像数据流。
    • 可以预览PDF,有一个PDF.js lib可以将本地PDF文件渲染到画布中
    • AFAIK 无法在客户端进行视频转换

    【讨论】:

    • 它确实解决了客户端上传的一个特殊问题,其他的呢?
    • 刚刚添加了一些关于图像裁剪和 PDF 预览的信息
    猜你喜欢
    • 1970-01-01
    • 2017-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多