Author: michiel
Date: 2010-07-02 08:48:46 +0200 (Fri, 02 Jul 2010)
New Revision: 42789
Modified:
mmbase/trunk/applications/resources/src/main/java/org/mmbase/servlet/FileServlet.java
mmbase/trunk/applications/resources/src/test/java/org/mmbase/servlet/FileServletTest.java
Log:
details
Modified:
mmbase/trunk/applications/resources/src/main/java/org/mmbase/servlet/FileServlet.java
===================================================================
---
mmbase/trunk/applications/resources/src/main/java/org/mmbase/servlet/FileServlet.java
2010-07-02 06:16:04 UTC (rev 42788)
+++
mmbase/trunk/applications/resources/src/main/java/org/mmbase/servlet/FileServlet.java
2010-07-02 06:48:46 UTC (rev 42789)
@@ -34,7 +34,7 @@
* @see AttachmentServlet
*/
public class FileServlet extends BridgeServlet {
- private static Logger log;
+ private static Logger log = Logging.getLoggerInstance(FileServlet.class);
private static final UrlEscaper URL = new UrlEscaper();
private static final String SESSION_EXTENSION = ".SESSION";
@@ -76,9 +76,7 @@
@Override
public void setMMBase(MMBase mmb) {
super.setMMBase(mmb);
- if (log == null) {
- log = Logging.getLoggerInstance(FileServlet.class);
- }
+ log = Logging.getLoggerInstance(FileServlet.class);
if (files == null) {
File dataDir = MMBase.getMMBase().getDataDir();
@@ -356,8 +354,13 @@
String[] fl = parse.split("-", 2);
String firstString = fl[0].trim();
String lastString = fl[1].trim();
- first = firstString.length() > 0 ? Long.parseLong(firstString) :
0L;
- last = Math.min(max, lastString.length() > 0 ?
Long.parseLong(lastString) : Long.MAX_VALUE);
+ if (firstString.length() == 0) {
+ first = max - Long.parseLong(lastString);
+ last = max - 1;
+ } else {
+ first = Long.parseLong(firstString);
+ last = Math.min(max - 1, lastString.length() > 0 ?
Long.parseLong(lastString) : Long.MAX_VALUE);
+ }
this.max = max;
}
public long available(long i) {
@@ -483,24 +486,16 @@
long pos = 0;
while (pos < range.max) {
long available = range.available(pos);
+ if (log.isTraceEnabled()) {
+ log.trace("streaming " + available);
+ }
while(available > 0L) {
- if (log.isTraceEnabled()) {
- log.trace("streaming " + available);
- }
int b = in.read(buf, 0, (int) Math.min(available, 1024L));
- if (b > 0) {
- out.write(buf, 0, b);
- pos += b;
- available -= b;
- } else {
- //log.warn(" buf " + b);
- available = 0;
- }
+ out.write(buf, 0, b);
+ pos += b;
+ available -= b;
}
long notavailable = range.notavailable(pos);
- if (log.isTraceEnabled()) {
- log.trace("skipping " + notavailable);
- }
if (notavailable > 0L) {
in.skip(notavailable);
pos += notavailable;
Modified:
mmbase/trunk/applications/resources/src/test/java/org/mmbase/servlet/FileServletTest.java
===================================================================
---
mmbase/trunk/applications/resources/src/test/java/org/mmbase/servlet/FileServletTest.java
2010-07-02 06:16:04 UTC (rev 42788)
+++
mmbase/trunk/applications/resources/src/test/java/org/mmbase/servlet/FileServletTest.java
2010-07-02 06:48:46 UTC (rev 42789)
@@ -37,6 +37,9 @@
assertEquals(500, new ChainedRange("0-100,101-499",
10000).available(0));
assertEquals(0, new ChainedRange("0-100,101-999",
10000).notavailable(0));
assertEquals(500, new ChainedRange("0-200,101-499",
10000).available(0));
+ assertEquals(0, new ChainedRange("-500", 10000).available(0));
+ assertEquals(9500, new ChainedRange("-500", 10000).notavailable(0));
+ assertEquals(500, new ChainedRange("-500", 10000).available(9500));
}
@Test
public void testRangeLength() {
@@ -51,7 +54,7 @@
File outFile = File.createTempFile(FileServletTest.class.getName(),
null);
//System.out.println("" + outFile);
OutputStream out = new FileOutputStream(outFile);
- FileServlet.stream(null, in, out);
+ FileServlet.stream(range, in, out);
assertTrue(FileUtils.contentEquals(file, outFile));
}
@@ -65,12 +68,11 @@
public void streamRange() throws Exception {
File file = new File("src" + File.separator + "test" + File.separator
+ "images" + File.separator + "test.png");
{
- ChainedRange range = new ChainedRange("0-100,101-499,500-",
file.length());
+ ChainedRange range = new ChainedRange("0-100,101-499,500-" +
file.length(), file.length());
stream(range);
}
{
- ChainedRange range = new ChainedRange("" + (file.length() - 2000)
+ "-", file.length());
- System.out.println("" + range);
+ ChainedRange range = new ChainedRange("0-100,101-499,500-",
file.length());
stream(range);
}
}
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs