directory context handler
This commit is contained in:
parent
2b505d5176
commit
7b3d9cd366
1 changed files with 46 additions and 0 deletions
|
@ -0,0 +1,46 @@
|
||||||
|
package org.xbib.netty.http.server.context;
|
||||||
|
|
||||||
|
import io.netty.buffer.ByteBuf;
|
||||||
|
import io.netty.buffer.ByteBufAllocator;
|
||||||
|
import org.xbib.netty.http.server.transport.ServerRequest;
|
||||||
|
import org.xbib.netty.http.server.transport.ServerResponse;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.nio.channels.Channels;
|
||||||
|
import java.nio.channels.SeekableByteChannel;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
|
||||||
|
public class DirectoryContextHandler implements ContextHandler {
|
||||||
|
|
||||||
|
private Path path;
|
||||||
|
|
||||||
|
private ByteBufAllocator allocator;
|
||||||
|
|
||||||
|
public DirectoryContextHandler(Path path, ByteBufAllocator allocator) {
|
||||||
|
this.path = path;
|
||||||
|
this.allocator = allocator;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void serve(ServerRequest serverRequest, ServerResponse serverResponse) throws IOException {
|
||||||
|
String uri = serverRequest.getRequest().uri();
|
||||||
|
Path p = path.resolve(uri);
|
||||||
|
ByteBuf byteBuf = read(allocator, p);
|
||||||
|
serverResponse.write(200, "application/octet-stream", byteBuf);
|
||||||
|
byteBuf.release();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static ByteBuf read(ByteBufAllocator allocator, Path path)
|
||||||
|
throws IOException {
|
||||||
|
try (SeekableByteChannel sbc = Files.newByteChannel(path);
|
||||||
|
InputStream in = Channels.newInputStream(sbc)) {
|
||||||
|
int size = Math.toIntExact(sbc.size());
|
||||||
|
ByteBuf byteBuf = allocator.directBuffer(size, size);
|
||||||
|
byteBuf.writeBytes(in, size);
|
||||||
|
return byteBuf;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue