在Grails中下载文件时如何设置内容长度
How do I set the content length when downloading a files in Grails
我的控制器中有一个方法可以下载已上传的文件。我正在尝试将 Content-Length header 添加到下载方法中,以便下载进度条正常工作。
问题是我的不工作response.setContentLength("${documentInstance.fileSize}")
我收到找不到文件的错误。如果取消此方法,下载将正常进行
方法在这里
def download(long id) {
Document documentInstance = Document.get(id)
if ( documentInstance == null) {
flash.message = "Document not found."
redirect (action:'list')
} else {
response.setContentType("APPLICATION/OCTET-STREAM")
response.setHeader("Content-Disposition", "Attachment;Filename=\"${documentInstance.filename}\"")
response.setContentLength("${documentInstance.fileSize}")
def file = new File(documentInstance.fullPath)
def fileInputStream = new FileInputStream(file)
def outputStream = response.getOutputStream()
byte[] buffer = new byte[4096];
int len;
while ((len = fileInputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, len);
}
outputStream.flush()
outputStream.close()
fileInputStream.close()
}
}
你必须设置它有一个Header参数:
response.setHeader("Content-Length", "${bytes.length}")
此外,您可能希望在流式传输文件后禁用视图呈现。
webRequest.renderView = false
我的控制器中有一个方法可以下载已上传的文件。我正在尝试将 Content-Length header 添加到下载方法中,以便下载进度条正常工作。
问题是我的不工作response.setContentLength("${documentInstance.fileSize}")
我收到找不到文件的错误。如果取消此方法,下载将正常进行
方法在这里
def download(long id) {
Document documentInstance = Document.get(id)
if ( documentInstance == null) {
flash.message = "Document not found."
redirect (action:'list')
} else {
response.setContentType("APPLICATION/OCTET-STREAM")
response.setHeader("Content-Disposition", "Attachment;Filename=\"${documentInstance.filename}\"")
response.setContentLength("${documentInstance.fileSize}")
def file = new File(documentInstance.fullPath)
def fileInputStream = new FileInputStream(file)
def outputStream = response.getOutputStream()
byte[] buffer = new byte[4096];
int len;
while ((len = fileInputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, len);
}
outputStream.flush()
outputStream.close()
fileInputStream.close()
}
}
你必须设置它有一个Header参数:
response.setHeader("Content-Length", "${bytes.length}")
此外,您可能希望在流式传输文件后禁用视图呈现。
webRequest.renderView = false