[英]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.