diff --git a/src/main/java/org/caosdb/server/grpc/DownloadBuffer.java b/src/main/java/org/caosdb/server/grpc/DownloadBuffer.java index c1598f30d98e224a24705c2196fbcaf81be39fca..ba54a1c84219cd29b80eecd9ee9107c7a3572c93 100644 --- a/src/main/java/org/caosdb/server/grpc/DownloadBuffer.java +++ b/src/main/java/org/caosdb/server/grpc/DownloadBuffer.java @@ -37,6 +37,7 @@ public class DownloadBuffer { final long next_chunk_size = Math.min(unread_bytes, getChunkSize()); final MappedByteBuffer map = fileChannel.map(MapMode.READ_ONLY, position, next_chunk_size); + fileChannel.position(position + next_chunk_size); final FileChunk.Builder builder = FileChunk.newBuilder(); builder.setData(ByteString.copyFrom(map)); diff --git a/src/main/java/org/caosdb/server/grpc/FileTransmissionServiceImpl.java b/src/main/java/org/caosdb/server/grpc/FileTransmissionServiceImpl.java index 8007dcb1658d7dc6c76a0bf63efca4854045203c..fd46205354369a4d2893ca06f766c2fccb7a4164 100644 --- a/src/main/java/org/caosdb/server/grpc/FileTransmissionServiceImpl.java +++ b/src/main/java/org/caosdb/server/grpc/FileTransmissionServiceImpl.java @@ -133,10 +133,14 @@ public class FileTransmissionServiceImpl extends FileTransmissionServiceImplBase final FileDownloadRequest request, final StreamObserver<FileDownloadResponse> responseObserver) { try { - final FileDownloadResponse response = + FileDownloadResponse response = fileDownloadRegistration.downloadNextChunk(request.getFileTransmissionId()); - responseObserver.onNext(response); + + while (response.getStatus() == TransmissionStatus.TRANSMISSION_STATUS_GO_ON) { + response = fileDownloadRegistration.downloadNextChunk(request.getFileTransmissionId()); + responseObserver.onNext(response); + } responseObserver.onCompleted(); } catch (final Exception e) { e.printStackTrace();