Я посылаю 4 МБ файла по tcp на локальный сервер.Но файл хранится на локальном сервере в 36 МБ.
В чем проблема?
Я конвертирую файл в строку (base64) и добавляю его в json.затем преобразуйте json в байт [] и отправьте его.
Клиент отправляет байт на сервер:
await nwStream.WriteAsync(json, 0, json.Length);
NetworkStream streams = client.GetStream();
int Q = 0;
int M = json.Length;
int ss = 150001;
bool go = true;
while (go)
{
if(M< ss)
{
go = false;
ss = M;
}
if (M < 0)
{
go = false;
ss = M + ss;
}
await streams.WriteAsync(json, Q,ss);
Q += ss;
M -= ss;
}
и получает на стороне сервера байт []:
Byte[] bytes = new Byte[150001];
int i;
try
{
// Loop to receive all the data sent by the client.
while ((i = await stream.ReadAsync(bytes, 0, bytes.Length)) != 0)
{
// bytes contains received data in byte[].
// Translate data bytes to a UTF-8 string.
byte[] receivedBuffer = new byte[i];
Array.Copy(bytes, receivedBuffer, i);
data += System.Text.Encoding.UTF8.GetString(receivedBuffer);
if (data.IndexOf("}") > 0)
{
break;
}
}
}
catch (Exception ex)
{
}
Редактировать:
и Сохранить файл. Я кодирую «данные» в строку UTF8, затем преобразую в DeserializeObject.
var pi = Convert.FromBase64String(picbas64);
var x = (Bitmap)((new ImageConverter()).ConvertFrom(pi));
string path = @"pic\Operation\" + name + ".jpg";
var ZZ = x;
ZZ.Save(path);
return path;