2013-03-07 2 views
0

У меня возникли проблемы с HttpResponse.TransmitFile в Mono/linux. Этот код работает: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, который является шестнадцатеричным номером (0x1aad6 или 109270 в десятичном формате, который является размером вашего файла), а затем CRLF. Похоже на меня закодированное кодирование.

Ваши заголовки HTTP также должны содержать Transfer-Encoding: chunked.

Не о чем беспокоиться, сервер получит правильные данные.

+0

Ах, хорошо пятнистый. Не уверен, что вы имеете в виду, чтобы ничего не беспокоиться, это должен быть PNG-файл, но он не отображается, потому что у него есть заголовок, встроенный в него. У заголовков http есть набор функций кодирования. Шестнадцатеричный дамп выше из загруженного файла. –

+0

Как вы загружаете файл? Серверная сторона кажется правильной, но возможно, что все, что вы используете для ее загрузки, не понимает кодирование с кодировкой. –

+0

Google Chrome. Нет, это определенно связано с сервером - глядя на него в Wireshark, этот префикс длины сам префикс длины, заставляя его стать частью данных контента. –

Смежные вопросы