Я использую следующий код для загрузки файлов с S3. Однако код очень хорошо работает для средних и больших размеров файлов, однако для чрезвычайно малых размеров файлов (3kb - одна строка в TXT-файле) загрузка не выполняется.Невозможно скачать небольшие файлы, но можете скачивать большие файлы
// контроллер
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()' перед возвратом из метода. –