2013-03-07 123 views
0

我在Mono/linux下遇到了一些HttpResponse.TransmitFile問題。此代碼的工作:Mono HttpResponse.TransmitFile發送損壞的數據

using (var f = System.IO.File.Open(FileName, System.IO.FileMode.Open, FileAccess.Read)) 
{ 
    f.CopyTo(response.OutputStream); 
} 

在哪裏,因爲這不:雖然在這兩種情況下我找回了一些數據(雖然它在Windows上)

response.TransmitFile(FileName); 

,所不同的是極端的。這裏的數據的開始,因爲它應該是:

8950 4e47 0d0a 1a0a 0000 000d 4948 4452 
0000 04b0 0000 00a0 0806 0000 001c b895 
4700 0000 0473 4249 5408 0808 087c 0864 
8800 0000 0970 4859 7300 001b af00 001b 
af01 5e1a 911c 0000 0019 7445 5874 536f 
6674 7761 7265 0077 7777 2e69 6e6b 7363 
6170 652e 6f72 679b ee3c 1a00 0020 0049 
4441 5478 9cec bd79 7454 c799 37fc bbbd 
492d b5f6 7d97 90d8 1108 3060 b3d8 98dd 
3660 6ce2 78c1 d8ce 624f 66be 64f2 bd99 
9ce4 cb99 c9c9 36f1 c439 4eec c964 9cc5 
9937 f19b 38c9 6499 378e 63c7 3678 5f00 
6302 189b cd6c 0281 d086 d46a f5be dcef 
0f51 5777 a9ba b76e 770b 845d bf73 38b4 
... (109270 bytes total) 

,但是這是我得到:

3161 6164 360d 0a89 504e 470d 0a1a 0a00 
0000 0d49 4844 5200 0004 b000 0000 a008 
0600 0000 1cb8 9547 0000 0004 7342 4954 
0808 0808 7c08 6488 0000 0009 7048 5973 
0000 1baf 0000 1baf 015e 1a91 1c00 0000 
1974 4558 7453 6f66 7477 6172 6500 7777 
772e 696e 6b73 6361 7065 2e6f 7267 9bee 
3c1a 0000 2000 4944 4154 789c ecbd 7974 
54c7 9937 fcbb bd49 2db5 f67d 9790 d811 
0830 60b3 d898 dd36 606c e278 c1d8 ce62 
4f66 be64 f2bd 999c e4cb 99c9 c936 f1c4 
394e ecc9 649c c599 37f1 9b38 c964 9937 
8e63 c736 785f 0063 0218 9bcd 6c02 81d0 
86d4 6af5 bedc ef0f 5157 77a9 bab7 6e77 
... (109286 bytes total) 

它看起來像某種編碼問題的,但我難倒些什麼呢可能是或如何解決它。

回答

2

它以3161 6164 360d 0a開頭,這是一個十六進制數(0x1aad6109270,十進制,即文件大小),後跟一個CRLF。看起來像分塊編碼給我。

您的HTTP標題還應包含Transfer-Encoding: chunked

這不需要擔心,服務器會得到正確的數據。

+0

啊,很好的發現。不知道你的意思是什麼都不要擔心,它應該是一個PNG文件,但它不會顯示,因爲它的頭部嵌入了它的頭部。 http標頭確實具有分塊編碼集。上面的十六進制轉儲來自下載的文件。 – 2013-03-07 20:35:46

+0

你是如何下載文件的?服務器端似乎是正確的,但有可能無論你用什麼來下載它都不理解分塊編碼。 – 2013-03-07 21:35:00

+0

Google Chrome。不,它確實與服務器相關 - 在Wireshark中查看它,該長度前綴本身是以長度爲前綴的,從而使其成爲內容數據的一部分。 – 2013-03-08 12:42:21