22

ユーザーが好きな種類のファイルをアップロードできるサイトを作成しようとしています。私はこの機能をうまく実装しており、ファイルはサーバーに保持されています。後でファイルをダウンロードして表示できますが、うまく動作しません。

入手できる例はすべて使用しましたが、それらはすべてテキスト ファイルを例として使用する傾向があります。私の問題は、pdf やその他の多くのファイル タイプが正しくダウンロードされないことです。それらは正常にダウンロードされているように見えますが、どのファイルも正常に開きません。ファイルを比較すると、ほとんどのファイルの内容は正しいように見えますが、一部が正しくありません。

これが私のグルーヴィーなコードです:

def file = new File(params.fileDir)    
response.setContentType("application/octet-stream")
response.setHeader("Content-disposition", "filename=${file.getName()}")
response.outputStream << file.text
return

このコードは、ダウンロード リンクによって呼び出されるコントローラー内に保持されます。さまざまな contentTypes を試してみましたが、どのタイプにどのタイプを使用できるかわかりません - ありますか? 私が試しても問題は解決しません。

ご協力いただきありがとうございます。

4

1 に答える 1

41

問題は、「file.text」を使用してファイルの内容を文字列に読み込むことです。ファイルのコンテンツは、コンテンツがテキストではなくバイナリ (たとえば、PDF ファイルはバイナリ) であっても、システム文字エンコーディングを使用して変換され、応答エンコーディングを使用してクライアントに送信されるため、バイナリ コンテンツが変更されます。次のような別のアプローチを使用する必要があります。

def file = new File(params.fileDir)    
response.setContentType("application/octet-stream")
response.setHeader("Content-disposition", "attachment;filename=${file.getName()}")

response.outputStream << file.newInputStream() // Performing a binary stream copy
于 2008-12-28T22:32:43.657 に答える