2013-01-21 13 views
5

Ben asp.net içinde jilet gelen geliyorum. Genellikle bunun için bir [FilePost] kullanırdım, ancak bunu nasıl sınıfta yapacağımı bilmiyorum. İştebellekte dosya oluşturmak ve kullanıcı indirmek

ben o zaman ben bunu yapmak istiyorum ne

<g:link controller="MyController" action="downloadFile">Download</g:link><br> 

şeklinde endeksi bir bağlantı

class MyController{ 
def index{ } 
} 

bir kontrolör var durum kokan (bir dize almak olduğunu ne olduğu önemli değil) ve kullanıcının bu dizeyi içeren bir metin dosyasını indirmesini istemek istiyorum. Teşekkürler!

+0

Soru yöneltin http://stackoverflow.com/questions/6111255/grails-file-download. – rimero

+0

Bunu gördüm, ancak bu zaten var ve onu yükleyen bir dosyayı alır, anında bir dosya yapmak istiyorum – Badmiral

cevap

4

Çalışma Çözüm: Böyle

def downloadFile = 
{ 
    File file = File.createTempFile("temp",".txt") 
    file.write("hello world!") 
    response.setHeader "Content-disposition", "attachment; filename=${file.name}.txt" 
    response.contentType = 'text-plain' 
    response.outputStream << file.text 
    response.outputStream.flush() 
} 
+0

Benim yazıma bakın, bir dosya oluşturmak zorunda değilsiniz –

4

yüzden muhtemelen bir şey:

kendinizi bayt oluşturma ve OutputStream beslemek engelliyor Ne
byte[] bytes = "string".bytes 

response.setContentType("text/plain") 
response.setHeader("Content-disposition", "filename=\"xyz.txt\"") 
response.setContentLength(bytes.size()) 
response.outputStream << bytes 
1

? Örneğin, bir iş yönteminizden oluşturulan String.getbytes veya bayt.

0

Başlıkta tekrar .txt dosya uzantısı gerekli değildir.