1
下载大文件,我有一些问题,使用该servlet代码这使得Tomcat NIO and Sendfile使用下载:问题通过的Tomcat NIO和SENDFILE
long fileSize = file.length();
long startAt = 0;
if (request.getHeader("Range") != null) {
response.setStatus(206);
startAt = Long.parseLong(request.getHeader("Range").replaceAll("bytes=", "").split("-")[0]);
}
long dataToWrite = fileSize;
if (startAt > 0) {
response.setHeader("Content-Range", String.format("bytes - %d-%d/%d", startAt, fileSize - 1, fileSize));
dataToWrite = fileSize - startAt;
}
request.setAttribute("org.apache.tomcat.sendfile.filename", file.getCanonicalPath());
request.setAttribute("org.apache.tomcat.sendfile.start", startAt);
request.setAttribute("org.apache.tomcat.sendfile.end", fileSize);
response.setContentLength(Long.valueOf(dataToWrite).intValue());
它成功地与文件安博20MB的工作。但是当我试图下载大小约288Mb的文件时,我看到空文件。下载文件的大小是0字节。 我用JRE6,Tomcat的6.x的与NioConnector:
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443" useSendfile="true" />
我从来没有用过它,所以这里只是在黑暗中快速拍摄:尝试省略'response.setContentLength()'。 – BalusC 2010-06-23 13:37:24