2013-03-13 17 views
6

Ich arbeite an einem Grails-Anwendung, es hat eine Dateifreigabe-Funktion. Es lädt Dateien auf den Server und ermöglicht dem Benutzer, die Datei vom Server herunterzuladen. Ich habe den folgenden Code dafür:Große Datei herunterladen mit Grails

def file = new java.io.File(filePath) 
response.setContentType("application-xdownload") 
response.setHeader("Content-Disposition", "attachment;filename=${fileName}") 
response.getOutputStream() << new ByteArrayInputStream(file.getBytes()) 

Dieser Code funktioniert gut für kleine Dateien, aber wenn die Größe der Datei erhöht wird, dh> 100 MB, es gibt mir die folgende Fehlermeldung:

java.lang.OutOfMemoryError: Java heap space 

So Was kann ich tun, damit meine Anwendung große Dateien herunterladen kann? Dank

Antwort

9

Statt die Datei in den Speicher zu laden, ersetzen

response.getOutputStream() << new ByteArrayInputStream(file.getBytes()) 

mit:

file.withInputStream { response.outputStream << it } 
+0

Dank !! hat super funktioniert! –