2015-08-10 6 views
2

Я разрабатываю веб-приложение на основе Spring 4, которое предназначено для работы в качестве галереи для размещения изображений. Поэтому я должен реализовать клиентское приложение Java, которое заботится о загрузке изображений в веб-приложение из-за огромного количества изображений (может быть до 100000 изображений), которые должны быть загружены клиентом.Massive Multiple File Upload with Spring

В настоящее время я реализовал веб-приложение конечной точки REST, которое может получать одно изображение за другим и сохранять его на стороне сервера. Для каждого загружаемого изображения клиентское приложение делает запрос POST конечной точке REST, содержащей изображение. Учитывая тот факт, что эти изображения должны быть доступны в веб-приложении сервера как можно скорее, я думаю, что это не оптимальное решение для этой работы. Я думаю, что это решение даже не использует полную пропускную способность, которая будет доступна.

Теперь я спрашиваю, как реализовать эту функцию в разумном и эффективном способ, который использует полной доступной пропускной способности (возможно даже без REST)?

+0

глупый комментарий, вероятно, но у вас считаются раздувание и дефляция данных? – nafas

+0

Взгляните на [Restlet] (http://restlet.com/technical-resources/restlet-framework/guide/2.3/extensions/fileupload), обертка для [загрузки файла Apache] (https: //commons.apache .org/proper/commons-fileupload/using.html) – Keith

+0

@Keith, будет ли использование restlest причиной того, что клиент будет отправлять файлы параллельно, чтобы лучше использовать пропускную способность? –

ответ

1

Существуют различные способы, которыми это можно сделать, но просто глядя на путь сервера RESTful, который вы начали, мое предложение состоит в том, чтобы загрузить файлы параллельно.

Возможно, у вашего клиента будет несколько рабочих потоков. Рабочие потоки считывают общую блокирующую очередь. Вы определяете, сколько рабочих потоков необходимо создать. Основной поток будет определять, какие файлы нужно загружать. Затем основной поток войдет в очередь в расположение файла (как относительного, так и полного пути или URL-адреса) в очередь. Рабочие потоки будут захватывать запрос на загрузку файла из очереди и будут отправлять запрос POST для загрузки файла.

Это позволит вам лучше использовать пропускную способность. Затем вы можете добавить smarts, чтобы решить, сколько рабочих потоков использовать. Возможно, опросив сервер REST, спросите его, сколько рабочих потоков оно должно использовать. Сервер может иметь счетчик AtomicInteger, который имеет количество текущих загрузок. Он может вернуть MAX_UPLOADS - currentUploads.get().