Как перенести большие файлы при весенней загрузке с помощью REST API из серверного приложения в клиентское приложение - PullRequest
2 голосов
/ 08 июля 2019

Я пишу REST API в серверном приложении, которое позволит удаленному клиентскому приложению передавать большие файлы сервер-клиент.Файлы, которые будут отправлены на 1-5 ГБКроме того, он должен быть устойчивым к плохой передаче и соединению.Я написал сервис, который читает файл и отправляет его клиенту.Для небольших файлов проблем нет, оно отправлено.Проблема появилась уже при файле около 100мб, потому что я не получил ответ по http.Я пытался читать фрагментированные файлы и отправлять только фрагменты, чтобы клиентское приложение позже использовалось полностью, но возникает проблема чрезмерного использования памяти.Как передать файл без загрузки его в память приложения?

FileInputStream inputStream = new FileInputStream(file2download);
        response.setContentType(URLConnection.guessContentTypeFromName(file2download.getName()));
        response.setContentLength((int) file2download.length());
        String headerValue = String.format("attachment; filename=\"%s\"", file2download.getName());
        response.setHeader("Content-Disposition", headerValue);
        OutputStream outStream = response.getOutputStream();
        byte[] buffer = new byte[BUFFER_SIZE];
        int bytesRead = -1; // czytamy w pętli po fragmencie, który następnie przepisujemy do strumienia wyjściowego
        while ((bytesRead = inputStream.read(buffer)) != -1) {
            outStream.write(buffer, 0, bytesRead);
        }
        inputStream.close();
        outStream.close();
...