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