C # / BinaryWriter: странные символы появляются в потоке вывода - PullRequest
0 голосов
/ 15 октября 2010

У меня возникают трудности с выяснением причин появления странных символов в моем потоке вывода ... полный код @ pastebin

Выход Fiddler

заметили "s", "X", "" перед моей границей?

s---------------634227387532666996
Content-Disposition: form-data; name='key'

c06f4d0cdf6f2cc652635a08be34973d
X---------------634227387532666996
Content-Disposition: form-data; name='type'

file
�---------------634227387532666996
Content-Disposition: form-data; name='image'; filename='application_osx_split.png'
Content-Type=image/png

�PNG

мой код

var bound = "-------------" + DateTime.Now.Ticks.ToString();
var tmplField = "--" + bound + "\r\nContent-Disposition: form-data; name='{0}'\r\n\r\n{1}\r\n";
var tmplFile = "--" + bound + "\r\nContent-Disposition: form-data; name='{0}'; filename='{1}'\r\nContent-Type={2}\r\n\r\n";

....

using (var reqStream = req.GetRequestStream())
{
    var reqWriter = new BinaryWriter(reqStream);

    reqWriter.Write(string.Format(tmplField, "key", "c06f4d0cdf6f2cc652635a08be34973d"));
    reqWriter.Write(string.Format(tmplField, "type", "file"));
    reqWriter.Write(string.Format(tmplFile, "image", Path.GetFileName(filepath), "image/" + Path.GetExtension(filepath).Substring(1)));
    reqWriter.Write(File.ReadAllBytes(filepath));
    reqWriter.Write("\r\n--" + bound + "--");
    reqWriter.Flush();
}

UPDATE

Я заметил, что если вместо этого я сделаю что-то вроде ниже, используя комбинацию Stream & Binary Writers, я смогу избежать этой проблемы. Почему это так?

var reqWriter = new StreamWriter(reqStream);
reqWriter.Write(string.Format(tmplField, "key", "c06f4d0cdf6f2cc652635a08be34973d"));
reqWriter.Write(string.Format(tmplField, "type", "file"));
reqWriter.Write(string.Format(tmplFile, "image", Path.GetFileName(filepath), "image/" + Path.GetExtension(filepath).Substring(1)));
reqWriter.Flush();

var binWriter = new BinaryWriter(reqStream);
binWriter.Write(File.ReadAllBytes(filepath));
binWriter.Write("\r\n--" + bound + "--");
binWriter.Flush();

1 Ответ

5 голосов
/ 15 октября 2010

BinaryWriter префикс строки с их длиной.

Вместо этого используйте StreamWriter.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...