2015-04-04 95 views
1

我目前正在做一個學習netty的項目,我正在嘗試使用ChunkedFileHandler將文件從服務器發送到客戶端。因爲它是在控制檯中記錄 服務器端代碼中的文件被髮送閱讀Chunked文件Netty Java

@Override 
    public void channelActive(ChannelHandlerContext ctx) throws Exception { 
     System.out.println("In channel and the context is " + ctx); 
     ctx.writeAndFlush(new ChunkedFile(new File("Test//ige.dat"))); 
    } 

該文件被髮送。 但現在回到客戶端,我的記錄器說我正在接收1024字節的文件,這是絕對好的。

public class ChunkedFileClientHandler extends SimpleChannelInboundHandler<ChunkedFile> { 

    @Override 
    public void channelRead(ChannelHandlerContext ctx, Object msg) 
      throws Exception { 
     System.out.println("Read a chunk of file"); 
    } 

    @Override 
    public void channelReadComplete(ChannelHandlerContext ctx) throws Exception { 
     System.out.println("Chunk read completed!"); 
    } 

該文件服務器發送的是239 mb的。每次接收到一個數據塊時,首先啓動channelRead並觸發channelReadComplete。

現在我的問題是我將如何組裝這些塊,並再次形成文件的名稱和其他所有信息完好無損。我查看了netty網站,但他們沒有讀取分塊文件的客戶端代碼。

謝謝

回答

0

ChunkedFile API只傳輸文件的內容。如果您還需要傳輸文件名和其他所有信息(確切的信息是什麼?),您需要制定一個協議,除了文件數據外,還可以傳輸其他信息。

或者,您可以使用現有的協議,例如HTTP,它已經包含一個用於傳輸文件名稱及其內容的標頭。

要將數據寫入文件,只需使用目標路徑創建FileOutputStream並將接收到的數據寫入文件。

+0

好吧,我明白了,但是您對如何將文件塊組裝成可讀文件有任何想法嗎? – Sneh 2015-04-04 18:05:14

+0

查看更新的答案。 – yole 2015-04-04 18:25:53

+0

感謝您的回答。我現在可以在客戶端重新創建文件。只有最後一件我想知道的是,有沒有關於如何創建自定義協議的任何教程? Netty教程並不完全清楚,我不知道如何使用協議傳輸文件名。 – Sneh 2015-04-04 18:52:34