Olá Cleberson,
Entendo sua situação e realmente pode ser um desafio realizar o upload de arquivos grandes sem causar problemas de buffer de memória. Uma solução possível é utilizar a técnica de "multipart upload", que consiste em dividir o arquivo em partes menores e realizar o upload de cada parte separadamente. Dessa forma, você evita que a memória seja sobrecarregada com o arquivo inteiro.
Existem algumas bibliotecas que podem ajudar nessa tarefa, como o Apache Commons FileUpload e o AWS SDK for Java, que possuem suporte para multipart upload. Além disso, é importante verificar se o servidor de destino também suporta essa técnica.
Aqui está um exemplo de como realizar o upload de um arquivo em partes utilizando o Apache Commons FileUpload:
// Criar um objeto ServletFileUpload
ServletFileUpload upload = new ServletFileUpload();
// Definir o tamanho máximo das partes (no exemplo, 10MB)
upload.setFileSizeMax(10 * 1024 * 1024);
// Dividir o arquivo em partes e realizar o upload de cada uma
FileItemIterator iter = upload.getItemIterator(request);
while (iter.hasNext()) {
FileItemStream item = iter.next();
InputStream stream = item.openStream();
// Realizar o upload da parte atual
}
Espero ter ajudado e bons estudos!