如何提供从客户端上传文件夹的选项并进行相同处理?

Posted

技术标签:

【中文标题】如何提供从客户端上传文件夹的选项并进行相同处理?【英文标题】:How to provide an option upload a folder from the client and process the same? 【发布时间】:2016-08-06 12:26:34 【问题描述】:

当用户上传单个文件时,我们将按如下方式检索文件

play.mvc.Controller.request().body().asMultipartFormData().getFiles().get(0)

当用户选择并上传多个文件时,我们将按如下方式检索多个文件并逐个处理

play.mvc.Controller.request().body().asMultipartFormData().getFiles()

现在我们需要允许用户上传一个包含文件的文件夹,子文件夹和子文件夹可能包含多个文件或文件夹。我们需要全部处理。

例如,在 FileZilla 中,用户可以上传整个文件夹,该文件夹、子文件夹、子文件夹和所有文件都会上传到服务器。

在以下方面需要帮助

    如何为用户提供上传文件夹的选项? Play 框架中哪个 Play API 用于递归处理文件夹、子文件夹和文件? 所有浏览器都支持文件夹上传吗? 我们是否有任何实用程序可以接受来自客户端的批量上传或文件夹上传?

目前我们正在使用 anjular 1.0 并在上述方面需要帮助

谢谢。

【问题讨论】:

您可以在输入上使用webkitdirectory="" 属性。这将允许谷歌浏览器上传文件夹。但是,据我所知,这仅受 Chrome 支持。在 Java 代码中,您应该能够像上传多个文件时一样处理文件。 其他浏览器呢? Chrome 是否只支持它?假设文件夹正在上传,你能帮我提供一个示例 sn-p 或伪代码吗? 不幸的是,只有 Chrome 支持它。这是一个 jsfiddle,其中一个输入的 webkitdirectory 设置为jsfiddle.net/dt0cbmkt。至于Java,我没有Play框架的项目,但尝试使用你说的:play.mvc.Controller.request().body().asMultipartFormData().getFiles() 【参考方案1】:

    从客户端压缩目录并作为单个文件上传。

    在播放框架中使用java.util.zip 解压缩文件并处理。这不是 Play 或 Scala 的特性,而是来自 Java 的特性。

    见:JSZip

    见:How to unzip a zip file using scala?

    见:How do I list all files in a subdirectory in scala?

【讨论】:

谢谢,达雷尔。我想知道将文件夹处理为 zip 是最佳做法,还是处理文件夹本身是最佳做法,因为 chrome 和 firefox 支持文件夹上传。另外,能否请您帮助我了解如何在 Play Java 而不是 Scala 中列出子目录中的所有文件

以上是关于如何提供从客户端上传文件夹的选项并进行相同处理?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Meteor 处理文件上传?

上传前客户端 zip 文件提取的选项

如何从 Jmeter 发送 csv 文件上传请求

是否可以从 .wav 文件创建 MediaStream?

如何计算不同机器上的统计数据并再次组合它们?

从烧瓶中的文件存储对象中提取文件