私は以下のコードを使用してS3からファイルをダウンロードしています。このコードは、中規模から大規模のファイルサイズではうまく機能しますが、ダウンロードが失敗すると、ファイルサイズが非常に小さい(3kb - TXTファイルで1行)場合に適しています。小さいファイルをダウンロードできませんが大きなファイルをダウンロードできます
//コントローラ
def download() {
Request request = Request.get(params.int("id"))
response.setContentType("application/octet-stream")
myService.downloadFileFromS3(request.origFileName, response)
}
void downloadFileFromS3(String fileName, HttpServletResponse response) {
String fullFileNameWithExtension = fileName
response.setHeader("Content-disposition", "attachment;filename=${fullFileNameWithExtension}")
InputStream is = getS3Client().getObject(getBucketName(), fullFileNameWithExtension).getObjectContent()
OutputStream outputStream = response.getOutputStream()
byte[] buffer = new byte[1024];
int length
log.info("This is the length: " + length)
while ((length = is.read(buffer)) != -1) {
log.info("Came here with length: " + length)
outputStream.write(buffer, 0, length)
}
is.close()
}
小さなファイルのために入れログアウト:大きなファイルの
This is the length: 0
Came here with length: 15
GroovyPagesServlet: "/WEB-INF/grails-app/views/request/download.gsp" not found
ログ出力を:
This is the length: 0
Came here with length: 1024
Came here with length: 1024
Came here with length: 1024
Came here with length: 1024
Came here with length: 1024
Came here with length: 1024
Came here with length: 1024
Came here with length: 1024
Came here with length: 1024
Came here with length: 1024
Came here with length: 1024
Came here with length: 531
だから、小さなファイルのためにそれがあると思われますdownload.gsp
を探しています。しかし、それは私がものを入れているので、そのビューを探してはいけませんresponse
それがどのように失敗するのですか?どのような例外が発生していますか?あなたはどんなエラーを出していますか?詳細を提供する必要があります。 –
@JoshuaMoore私は詳細を更新しました。 – Anthony
メソッドから戻る前に 'outputStream.flush()'を試してください。 –