使用Spring进行大规模多文件上传

时间:2015-08-10 16:14:43

标签: java spring spring-boot

我正在开发一个基于Spring 4的Web应用程序,旨在充当托管图像的某种图库。 因此,我必须实现一个Java客户端应用程序,它负责将图像上传到Web应用程序,因为必须由客户端上载大量图像(可能多达100000个图像)。

我目前已经实现了一个REST端点Web应用程序,它能够接收一个图像,并将其保存在服务器端。对于要上载的每个映像,客户端应用程序向包含映像的REST端点发出POST请求。考虑到这些图像应该尽快在服务器Web应用程序上可用,我想这不是这项工作的最佳解决方案。我认为这个解决方案甚至不能使用可用的全部带宽。

现在我问的是如何以合理且高效的方式实现此功能,使用完全可用带宽(甚至可以不使用REST)?

1 个答案:

答案 0 :(得分:1)

有多种方法可以做到这一点,但只是看一下你已经开始的RESTful服务器方式,然后我的建议是并行上传文件。

您的客户端是否可以拥有多个工作线程。工作线程读取共享阻塞队列。您可以决定要创建多少个工作线程。主线程将确定需要上传哪些文件。然后,主线程将进入队列的文件位置(相对路径或完整路径或URL)进入队列。工作线程将从队列中获取文件上载请求,并发出POST请求以上传文件。

这样可以更好地利用带宽。然后,您可以添加智能以确定要使用的工作线程数。也许通过轮询REST服务器来询问它应该使用多少个工作线程。服务器可能有一个AtomicInteger计数器,其中包含当前上载的数量。它可以返回MAX_UPLOADS - currentUploads.get()