Discussion:
[問題] 請問如何插入檔案(如圖片)到XML中
(时间太久无法回复)
╮(╯3╰)╭
2007-02-24 06:20:52 UTC
Permalink
請問各位
我在實做一個兩端點訊息傳送的機制
所有來往訊息都以XML包裹之
但是當我要傳送一個包含圖片的訊息時 發生了問題:

是否可以插入一個*檔案*到XML Element 的 TextContent中呢?

我嘗試把檔案轉為byte[], 再轉為String, 然後插到需要的節點下
再將該份XML轉為 byte[] 透過網路傳到另一個端點
但是接收端無法將這份訊息再還原成為XML

我猜測是當檔案被轉為String的同時,
包含了一些XML的關鍵字元導致判斷失效

請問有人有解決的方法嗎?

謝謝您。

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.216.190.9
學無止境,啥時才摔到底?
2007-02-24 06:39:16 UTC
Permalink
※ 引述《montreal (╮(╯3╰)╭)》之銘言:
: 我嘗試把檔案轉為byte[], 再轉為String, 然後插到需要的節點下
: 再將該份XML轉為 byte[] 透過網路傳到另一個端點
: 但是接收端無法將這份訊息再還原成為XML
: 我猜測是當檔案被轉為String的同時,
: 包含了一些XML的關鍵字元導致判斷失效
: 請問有人有解決的方法嗎?
: 謝謝您。

單純的作法...
將byte[]利用base64encoder轉換送出,
接受之後用base64decoder還原即可。
若你必須要考慮到檔案過大的問題,可搭配檔案壓縮使用。

複雜的作法...
XML文件只告訴對方檔案的數量、index、path_name以及size,
之後依序將檔案以binary方式上傳即可~


--
No Dying Skills, ● - Dame! New tech...
but Lazy Users. .\)
http://www.wretch.cc/blog/hougzou ___________ ﹒ ︵ √\ ___________________

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 211.74.120.62
╮(╯3╰)╭
2007-02-24 10:29:48 UTC
Permalink
※ 引述《hougzou (學無止境,啥時才摔到底?)》之銘言:
: ※ 引述《montreal (╮(╯3╰)╭)》之銘言:
: : 我嘗試把檔案轉為byte[], 再轉為String, 然後插到需要的節點下
: : 再將該份XML轉為 byte[] 透過網路傳到另一個端點
: : 但是接收端無法將這份訊息再還原成為XML
: : 我猜測是當檔案被轉為String的同時,
: : 包含了一些XML的關鍵字元導致判斷失效
: : 請問有人有解決的方法嗎?
: : 謝謝您。
: 單純的作法...
: 將byte[]利用base64encoder轉換送出,
: 接受之後用base64decoder還原即可。
: 若你必須要考慮到檔案過大的問題,可搭配檔案壓縮使用。
: 複雜的作法...
: XML文件只告訴對方檔案的數量、index、path_name以及size,
: 之後依序將檔案以binary方式上傳即可~
謝謝您的回答!
經過base64方法可行。

不過當檔案大小達到8mb的時候,
嵌入DOM中經過Transformer轉換時會出現記憶體不足的Exceotion
我目前只有想到調大-xmx這個方法



--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.216.190.9
※ 編輯: montreal 來自: 61.216.190.9 (02/24 18:29)
╮(╯3╰)╭
2007-02-25 13:15:07 UTC
Permalink
※ 引述《***@bbs.wretch.cc (foolish)》之銘言:
: 換一個操作 xml 的 library 試看看
: 也許是你現在用的 library 產生過多的暫時性 String
: 另外比較好奇你原本的轉成 String 的做法是什麼
: 也許你可以比較一下他和 base64 的長度, 選擇較好的方式
: (base64 總是比原來的 byte 數多了一些)
: ps. 原先的實作不能正常處理也許沒有宣告成 CDATA 的緣故
: http://www.w3schools.com/xml/xml_cdata.asp

原來還有這一招! 我來試試看 :Q
有人說DOM處理XML會比別的方法增加更大檔案量
我想如果要插入大量內容的話,換個JDOM或其他的lib試試看效能好了

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.216.183.114

Loading...