У меня есть контроллер, который устанавливает связь с URL для получения файла CSV.
Я могу отправить файл в ответе с помощью следующего кода, это хорошо работает.
def fileURL = "www.mysite.com/input.csv"
def thisUrl = new URL(fileURL);
def connection = thisUrl.openConnection();
def output = connection.content.text;
response.setHeader "Content-disposition", "attachment;
filename=${'output.csv'}"
response.contentType = 'text/csv'
response.outputStream << output
response.outputStream.flush()
Однако я думаю, что этот метод является несоответствующим для большого файла, поскольку целый файл загружается в память контроллеров.
Я хочу смочь считать блок файла блоком и записать файл в блок ответа блоком.
Какие-либо идеи?
Groovy OutputStreams может принимать InputStreams напрямую с помощью оператора <<
. OutputStream будет автоматически извлекать данные с буфером подходящего размера.
Следующее должно эффективно копировать данные, даже если CSV довольно большой.
def fileURL = "www.mysite.com/input.csv"
def thisUrl = new URL(fileURL);
def connection = thisUrl.openConnection();
def cvsInputStream = connection.inputStream
response.setHeader "Content-disposition", "attachment;
filename=${'output.csv'}"
response.contentType = 'text/csv'
response.outputStream << csvInputStream
response.outputStream.flush()