これに関してSOについてすでにいくつか質問があることは知っていますが、それらの解決策はどれも機能しませんでした。
divをクリックしようとしています。次に、jQueryがコントローラーにget
リクエストを送信し、最後に静的ファイル(Zip)をダウンロードします。chrome開発ツールを使用すると、リクエストが有効な200として返されていることがわかります。リクエストの応答は、chromeが試みたレンダリングのようですが、zipファイルに含まれているファイルの名前を確認できるので、すべてが正しいことがわかっていることがわかります。
応答ヘッダーは次のとおりです。
Content-Type:application/zip
Content-disposition:attachment;filename=myFile.zip
Date:Thu, 12 Jul 2012 20:18:05 GMT
Server:Apache-Coyote/1.1
Transfer-Encoding:chunked
私のコントローラーロジック:
def root = request.getSession().getServletContext().getRealPath("/")
def file = new File("C:\path\to\my\file")
if (file.exists()) {
def os = response.outputStream
response.setHeader("Content-Type", "application/zip")
response.setHeader("Content-disposition", "attachment;filename=${file.name}")
def bytes = file.text.bytes
for(b in bytes) {
os.write(b)
}
os.flush()
org.springframework.web.context.request.RequestContextHolder.currentRequestAttributes().renderView = false
}
ブラウザが実際にファイルをダウンロードしていない理由がわかりません。コントローラーロジックのさまざまなバリエーションを試しましたが、すべて同じ結果になりました。
私が試したいくつかのこと:
- Content-Type as'application / octect-stream;'
response.outputStream << file.bytes
response.outputStream << file.newInputStream()
- content-lengthを追加しました
- ストリームの書き込み後にコンテンツタイプを移動する
Grails2.0.4を使用しています