我想創建一個使用Java NIO的HTTP靜態文件服務器,它適用於小文件,但似乎會截斷較大文件的HTTP響應(3.8 MB圖像中有672 KB根據我的Chrome Inspector返回,並且我的瀏覽器顯示部分損壞的圖像)。這段代碼是否錯誤?NIO Http文件服務器 - 連接過早關閉
(我知道這是你現有的庫,最終我將使用一個在我的項目,但最初我想實現一個基本的自己,看看我的項目的概念是可行的。)
Iterator<SelectionKey> keys = selector.selectedKeys().iterator();
while (keys.hasNext()) {
SelectionKey key = keys.next();
keys.remove();
if (key.isAcceptable()) {
// New Client encountered
serverSocket.accept().configureBlocking(false)
.register(selector, SelectionKey.OP_READ);
} else if (key.isReadable()) {
// Additional data for existing client encountered
SocketChannel selectedClient = (SocketChannel) key.channel();
ByteBuffer buffer = ByteBuffer.allocate(548);
String requestedFile2 = getRequstedFile(key, selectedClient, buffer);
buffer.clear();
buffer.flip();
FileChannel fc = FileChannel.open(Paths.get(requestedFile2));
String string = "HTTP/1.1 200 Ok\nContent-Type: image/jpeg\nContent-Length: "
+ (Files.size(Paths.get(requestedFile2)) + "\n\n");
selectedClient.write(ByteBuffer.wrap(string.getBytes()));
while (fc.read(buffer) > -1) {
buffer.flip(); // read from the buffer
selectedClient.write(buffer);
buffer.clear();
}
selectedClient.close();
}
}
(異常處理等爲簡潔起見省略)
EDIT
我有一個內容長度失配錯誤消息。那麼,使用NIO API讀取文件內容時,確定HTTP響應大小的正確方法是什麼?
我做了3個編輯,但現在瀏覽器不顯示任何內容。另外,我不確定「將數據複製到文件」的含義。我正在嘗試讀取文件。我們在談論同樣的問題嗎? –