Пример загрузки Java-файла gRPC
Я ищу способ реализации функции загрузки файлов с помощью gRPC, но я не могу найти в документации, как это делается.
Каков оптимальный способ сделать это? Я хотел иметь сервер gRPC, который содержит файлы, и клиент gRPC для запроса чего-либо из gRPC.
Я посмотрел на примеры в Java, но не смог найти способ, как это сделать. Я только начал читать о gRPC сегодня.
2 ответа
Вы должны определить конкретный message
в качестве контейнера данных, и вы должны передать его клиенту порциями, используя stream
,
Пример протокольного сообщения и службы RPC:
message DataChunk {
bytes data = 1;
}
rpc DownloadProductImage(DownloadProductImageRequest) returns(stream DataChunk){}
В Java вы можете использовать BufferedInputStream
для потоковой передачи ресурса клиенту.
Пример кода на стороне сервера.
Пример кода на стороне клиента.
Есть несколько возможных подходов.
Если размер вашего файла достаточно мал, вы можете определить файл proto с одним полем String и выгрузить весь текстовый контент в это поле.
Если размер вашего файла слишком велик, вы можете разделить файл на части и использовать потоковый API для отправки фрагмента файла по фрагменту.
Ниже приведено хорошее руководство по началу работы с gRPC.
Я взял рабочий пример с db80 и создал PR с полным примером: https://github.com/grpc/grpc-java/pull/5126
Надеемся, что они объединят это, тогда у каждого может быть рабочий пример этого общего варианта использования для GRPC.