Поскольку запрошенная комбинация невозможна, мы пропустили интеграцию JMS и используем классы IBM MQ для Java . https://www.ibm.com/support/knowledgecenter/en/SSFKSJ_9.0.0/com.ibm.mq.dev.doc/q118320_.htm
JMS-решение подготовлено и может быть интегрирован, как только TomEE будут перенесены в 7.x.
Я опоздал на восемь месяцев, но я только что наткнулся на этот вопрос и был удивлен, что о webDAV не упомянули. Вы можете использовать метод HTTP PUT для загрузки и включить заголовок Content-Range для обработки возобновления и т.д. Запрос HEAD сообщит вам, существует ли уже файл и насколько он велик. Итак, возможно, что-то вроде этого:
1) ЗАГОЛОВКА удаленного файла
2) Если он существует и размер == локальный размер, загрузка уже выполнена
3) Если размер <локальный размер, добавьте Content-Range заголовок для запроса и поиска подходящего места в локальном файле.
4) Сделайте запрос PUT для загрузки файла (или части файла, если он возобновляется)
5) Если соединение не удается во время запроса PUT, начните заново с step 1
Вы также можете перечислить (PROPFIND) и переименовать (MOVE) файлы, а также создать каталоги (MKCOL) с помощью dav.
Вам нужен стандартный размер (скажите что 256k). Если бы Ваш файл "abc.txt", загруженный пользователем x, составляет 78.3 МБ, это были бы 313 полных блоков и один меньший блок.
Вы могли увеличить или сократить число потоков по желанию, так как приложение управляет отправкой.
Можно легко показать индикатор хода выполнения, или простой индикатор выполнения или что-то близко к подробному представлению downthemall блоков.
Действительно ли инвертирование является целым процессом опция? Я имею в виду, вместо того, чтобы протолкнуть файл к серверу заставляют сервер вытянуть файл с помощью стандартного HTTP, ДОБИРАЮТСЯ со всеми дополнительными свойствами (как принимать-диапазоны, и т.д.).
Возможно, самый легкий метод должен был бы создать страницу загрузки, которая примет имя файла и диапазон в параметре, таком как http://yourpage/.../upload.php?file=myfile&from=123456 и обработает резюме в клиенте (возможно, Вы могли добавить функцию для осмотра, какие диапазоны сервер получил),
libcurl (C api) could be a viable option
-C/--continue-at Продолжить / возобновить предыдущую передачу файла с заданным смещением. Заданное смещение - это точное количество байтов, которые будут пропущены, считая от начала исходного файла до его передачи в место назначения. Если используется для загрузки, команда SIZE FTP-сервера не будет использоваться curl. Используйте «-C -», чтобы указать curl, чтобы он автоматически определял, где и как возобновить передачу. Затем он использует данные файлы вывода / ввода, чтобы выяснить это. If this option is used several times, the last one will be used