Как реализовать загрузку фрагментированных файлов Huawei с помощью Java

Мне нужно реализовать конвейер развертывания, и в конце конвейера мы загружаем файл, в данном случае в магазин приложений Huawei. Но для файла размером более 5 мегабайт мы должны использовать API-интерфейс с фрагментами. Я не знаком с тем, как работают фрагментированные загрузки. Может ли кто-нибудь дать мне руководство по реализации, желательно в java, о том, как реализовать такой механизм? Параметры API следующие:

введите здесь описание изображения

Изменить: в ответ в комментарии ниже позвольте мне уточнить мой вопрос. При поиске ссылок на то, как выполнять разбивку запроса, такие библиотеки, как httpclient и okhttp, просто устанавливают для флага chunk значение true и, похоже, скрывают детали от клиента библиотеки:

https://www.java-tips.org/other-api-tips-100035/147-httpclient/1359-how-to-use-unbuffered-chunk-encoded-post-request.html< /а>

Тем не менее, входные параметры API, похоже, ожидают, что я управляю фрагментом вручную, поскольку он ожидает ChunkSize и порядковый номер. Я думаю, что мне может понадобиться использовать простой java-интерфейс http для работы с API, но мне не удалось найти хороший источник, чтобы начать. Если есть кто-нибудь, кто мог бы дать мне ссылку или руководство по реализации, это определенно поможет.

Дополнительные обновления: я попытался вручную разбить файл на несколько частей, каждая размером в 1 мегабайт. Затем я подумал, что могу попробовать вызвать API для каждого фрагмента, используя multipart/form-data. Но серверная сторона всегда закрывает соединение еще до начала записи, вызывая: Сброс соединения одноранговым узлом: ошибка записи сокета.

Это не должно быть проблемой прокси, так как я его настроил и могу без проблем получить токен, URL-адрес и код аутентификации.


person Mycotina    schedule 30.01.2020    source источник
comment
Ага, а почему бы не спросить у Хуавей? Кроме того, где ваши усилия по кодированию этого?   -  person Smutje    schedule 30.01.2020
comment
Да, я был бы рад, если бы у меня была прямая поддержка от Huawei, как это реализовать, чего у меня не было. Но я почти уверен, что группированный запрос не является проприетарной технологией Huawei, поэтому я уверен, что это сообщество может помочь, по крайней мере, указать мне правильное направление. Не для этого ли существует этот форум? И зачем столько судить? Я все еще работаю над этим и обязательно поделюсь ответом, если мне удастся решить его, прежде чем я получу какой-либо ответ. Но если кто-то с опытом может сказать мне, как решить эту проблему, написав 5 минут, разве это не принесет пользу сообществу?   -  person Mycotina    schedule 31.01.2020
comment
В вашем вопросе отсутствует код и собственная инициатива. Люди здесь обычно рады помочь с ошибками, но вы более или менее просите либо учебник, либо кого-то, кто сделает работу за вас. Насколько я понял, это не цель stackoverflow.   -  person maio290    schedule 31.01.2020


Ответы (1)


  1. Сегментация файла: на сервер загружается файл размером более нескольких гигабайт. Если вы можете использовать только самую простую загрузку, получение, обработку и успех, я могу только сказать, что ваш сервер очень хорош. Даже если сервер достаточно хорош, эта операция не разрешена. Поэтому мы должны найти способ решить эту проблему.

В первую очередь нам предстоит решить проблему больших файлов. Нет возможности разрезать их на несколько m байт и много раз отправлять на сервер и сохранять. Затем назовите эти файлы с помощью MD5 + индекс исходного файла. Конечно, некоторые друзья используют UUID + индекс, чтобы назвать их. Различия между ними будут подробно описаны ниже. Когда вы загружаете эти небольшие файлы на сервер отдельно, эти записи лучше сохранять в базу данных.

(1) Когда загрузка первого блока будет завершена, запишите имя, тип, MD5, дату загрузки, адрес и незаконченный статус исходного файла в таблицу и измените статус завершения сплайсинга на завершенный. Таблица файлов с временным именем

(2) После загрузки каждого блока запись сохраняется в базе данных. Имя индекса MD5 + исходного файла, MD5 блока (это ключевой момент), время загрузки и адрес файла. Сохраните в базе данных и назовите ее файл__ таблица TEM

  1. Функция второй передачи: многие онлайн-диски реализуют эту функцию. В начале загрузки отправьте запрос Ajax, чтобы узнать о существовании загружаемого файла. Здесь H5 предоставляет метод для получения файла MD5, а затем использует ajax для запроса, существует ли MD5 в файле и завершено ли состояние. Если он существует, также проверьте, существует ли еще локальный файл. В случае одновременного существования. Вы можете вернуть статус присутствия на стойку регистрации, а затем с гордостью сказать клиенту, что секунды прошли. вот ссылка: https://blog.csdn.net/weixin_42584752/article/details/80873376
person Mary    schedule 28.05.2020