簡體   English   中英

我可以使用mime / multipart讀取器從Conn讀取數據嗎?

[英]Can I use mime/multipart reader for data read from a Conn?

我正在通過TCP套接字發送BOUNDARY分隔的JSON數據。 我讀到golang有mime / multipart讀者,因此嘗試使用它,但無濟於事。

有問題的代碼是:

//I create a reader wrapped around a Conn type with boundary previously defined
reader := multipart.NewReader(conn, MESSAGE_BOUNDARY)

//Then I have a gopher which reads the parts/data from it:
part, _ := reader.NextPart()
var line []byte
part.Read(line)

問題是,NextPart()塊一直沒有傳遞。 即使我正在接收數據,我也從來沒有得到過PART(嘗試從Conn讀取數據,然后再嘗試獲得下一部分,依此類推)。 我嘗試使用bufio閱讀器更改多部分閱讀器,並使用ReadString獲得了我想要的。 問題是,我無法使用單個字節來定界,因為我正在傳遞可能包含各種字節的大型消息。 任何幫助,將不勝感激。

確認您的數據與mime/multipart Reader期望的格式匹配。 在您的情況下, reader.NextPart()可能會被阻止,以等待正確的邊界或每部分標題。

請參閱NewReader下的示例以供參考:

--MESSAGE_BOUNDARY\r\n
Header1: Value\r\n
Header2: Value\r\n
\r\n
<part data>\r\n
--MESSAGE_BOUNDARY\r\n
Header1: Value\r\n
\r\n
<part data>\r\n
--MESSAGE_BOUNDARY--\r\n

另外,請確保檢查從NextPart()返回的錯誤值,它將告訴您是否存在MIME編碼問題或通用I / O錯誤。

最后, part.Read(line)不能像上面寫的那樣工作,因為您的line緩沖區的容量為0字節。 如果可以在內存中緩沖每個部分,則可以按照NewReader示例中的NewReader使用io / ioutil ReadAll 否則,聲明line作為line := make([]byte, 4096)並使用一個循環來讀出在4KB塊中的部分數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM