【问题标题】:programmatically passing FineUploader the location of the file to upload以编程方式向 FineUploader 传递要上传的文件的位置
【发布时间】:2016-11-01 14:59:37
【问题描述】:

我们设计了一个客户端程序原型,让用户可以选择本地文件夹,创建一个 zip,然后让本地浏览器通过本地 Web 套接字了解 zip 文件的位置。目的是然后告诉fineUploader这个新的zip文件位置,以便它可以立即开始上传过程。

但我不清楚如何完成交接的最后一部分。我刚看到this post,听起来很令人担忧。

有什么办法吗?如果没有,考虑到用户已经选择了一个目录,它已经为他们压缩,并且我们希望 FineUploader 组件处理上传,我们如何才能获得可接受的用户体验?

谢谢!

学习

【问题讨论】:

  • 这个 zip 文件是否存储在本地用户的文件系统中? zip 文件本身是否可以通过 HTTP 或 Web 套接字访问?
  • 是的,它在本地用户文件系统上。我们编写了一个作为 java 应用程序运行的小型 websocket 服务器,与本地页面通信。它通过一个swing文件选择器提示用户,然后开始压缩,通过websocket通道发送进度和最终状态(zip位置)。
  • zip 文件本身是否可以通过 HTTP 或 Web 套接字访问?
  • 我们正在使用它将文件发送到 S3 顺便说一句。 ...如果fineUploader 提示他们选择刚刚创建的zip 文件,我什至会选择一个双重提示用户的解决方案,在执行zip 操作后。这有点傻,但会很实用。当然,如果有办法以某种方式从 wss 管道启动 FineUploader 上传,那将是首选
  • 目前不是,但可能是。 wss 服务器可以通过其中任何一种机制公开它

标签: fine-uploader


【解决方案1】:

在浏览器中运行的代码无法直接访问您的文件系统。如果您想上传文件,您的用户必须通过拖放或<input type="file"> 选择器对话框手动选择这些文件。

但是,如果 zip 文件可通过 HTTP 或 WS 访问,则这是可能的。假设使用 HTTP,您可以对 zip 文件 read it into a Blob 发出 ajax GET 请求,然后通过 addFiles API method 将此 Blob 发送到 Fine Uploader。如果您通过 WS 读取文件,则需要获取返回的数据并使用 FileReader 将其转换为 Blob

请注意,这在 IE10 之前的浏览器中是不可能的。

【讨论】:

  • 这可能有大文件的内存问题吗?如,如果 zip 实际上是 500mb,有没有办法避免将所有流文件数据保存在内存中?我知道 S3 需要一个内容长度,因此文件必须首先通过 websocket 完全传输到本地页面,然后fineUploader 会将数据流式传输到 S3。想知道我是否应该考虑做些什么,或者使用特定的 API 从 websocket 中读取数据,这可能会最大限度地减少大文件的内存占用?
  • 是的,大文件可能存在内存问题。没有合理的方法可以避免这种情况。老实说,与其在服务器端压缩文件,然后将文件传输到浏览器,只是为了将文件发送到不同的服务器,不如将压缩文件发送到其最终目标服务器端。
  • 我没有正确解释用例。我们的原型实际上是在用户浏览器所在的客户端压缩文件。用户单击“上传”按钮,该按钮会唤醒一个通过 websocket 侦听的小型 Java 应用程序。系统会提示用户在 swing 文件选择器中选择要上传的目录。选择后,java 应用程序会压缩到本地文件系统。 ...现在正在考虑如何将其引入 S3。
  • 由于fineUploader 对我们来说对单个文件非常有效,我可能不恰当地将这个用例硬塞到fineUploader 中。也许让客户端也上传到 S3 更好?最终用户可能有代理,我想我需要弄清楚如何配置 S3 客户端以使用浏览器已经知道的代理(继续使用 FineUploader 路径的一个原因似乎很有吸引力)。
  • 所有这些(压缩)都通过 Java Applet 在浏览器之外发生,实际上是在服务器端。我会让 Java 应用程序转身并上传到 S3。这是切题的,但在不久的将来,几乎不可能在任何浏览器中支持 Java Applets。您应该开始设计一个新的解决方案。
猜你喜欢
  • 1970-01-01
  • 2010-11-03
  • 2014-03-14
  • 1970-01-01
  • 2014-01-06
  • 2010-12-31
  • 1970-01-01
相关资源
最近更新 更多