是这样的
在发送彩信的时候,从网关发送过来的彩信有SOAP和附件,比如图片,但是图片他们采用binary方式传输,我收到消息后需要先把接收到的流全部转换成String,然后再分析处理。这样就导致采用binary的数据在我用
StreamReader read = new StreamReader(ostream);
System.Text.StringBuilder sb1 = new System.Text.StringBuilder();
sb1.Append(read.ReadToEnd());
的时候丢了图片信息,保存图片无法打开。请问高手有没有办法在我接受到流后转换成String不丢失图片信息呢。
在发送彩信的时候,从网关发送过来的彩信有SOAP和附件,比如图片,但是图片他们采用binary方式传输,我收到消息后需要先把接收到的流全部转换成String,然后再分析处理。这样就导致采用binary的数据在我用
StreamReader read = new StreamReader(ostream);
System.Text.StringBuilder sb1 = new System.Text.StringBuilder();
sb1.Append(read.ReadToEnd());
的时候丢了图片信息,保存图片无法打开。请问高手有没有办法在我接受到流后转换成String不丢失图片信息呢。
在这个过程中Steam转String的时候丢失了图片信息,因为图片是用binary方式传输。所以接受后转换时丢了数据。
请问有没有办法这里不丢数据呢?
图片不是文本数据,当然不行。
用FileStream试试
/// 保存图像
/// </summary>
private void SaveImage()
{
Cursor.Current = Cursors.WaitCursor ;
try
{
if (this.pictureBox1.Image == null)
return;
string imageExtension = GetExtenstion(this.pictureBox1.Image);
SaveFileDialog saveImageDialog = new SaveFileDialog();
saveImageDialog.Filter = SaveFilterType + "(*." + imageExtension + ")|*." + imageExtension;
saveImageDialog.RestoreDirectory = false;
saveImageDialog.OverwritePrompt = true;
saveImageDialog.CheckPathExists = true;
saveImageDialog.AddExtension = true;
saveImageDialog.CreatePrompt = true;
if (imageExtension == "" || imageExtension == null)
{
imageExtension = "jpg";
}
if (SaveImageName == null || SaveImageName == "")
{
DateTime dt = DateTime.Now;
SaveImageName = dt.Year + dt.Month.ToString() + dt.Day.ToString() + dt.Hour.ToString() + dt.Minute.ToString() + dt.Second.ToString() + "." + imageExtension;
}
else
{
FileInfo fi = new FileInfo(SaveImageName);
SaveImageName = fi.Name.Substring(0, fi.Name.LastIndexOf('.')) + "." + imageExtension;
fi = null;
}
saveImageDialog.FileName = SaveImageName;
saveImageDialog.FilterIndex = 1; DialogResult dr = saveImageDialog.ShowDialog();
if (dr == DialogResult.Cancel)
return; SaveImageName = saveImageDialog.FileName;
this.pictureBox1.Image.Save(saveImageDialog.FileName);
//保存最近一次保存目录
saveImageDialog = null; }
catch (Exception error)
{
MessageBox.Show(error.Message);
}
finally
{
Cursor.Current = Cursors.Default;
}
}
/// <summary>
/// 获取图像格式
/// </summary>
/// <returns>图像格式</returns>
private string GetExtenstion(Image img)
{
Type type = typeof(ImageFormat);
PropertyInfo[] imageFormatList=type.GetProperties (BindingFlags .Static |BindingFlags .Public);
for (int i=0;i<imageFormatList .Length ;i++)
{
ImageFormat format=(ImageFormat)imageFormatList [i].GetValue (null,null);
if(format .Guid .Equals (img.RawFormat .Guid ))
{
return imageFormatList [i].Name ;
}
}
return "";
}
你应该有方法指导这个流的什么位置到什么位置是binary的图像数据吧,如果知道的话把这部分byte[]单取出来保存图象就可以了啊
一个流转换成字节数组的副本。一个用StreamRead读取文本,非特殊部分用直接用ReadLine,特殊部分转换成数字分割。
保存成字符串如下:
MIME-Version: 1.0
Content-Type: multipart/related; type="text/xml"; start="<[email protected]>"; boundary="----=_Part_64_15298594.1278663723367"------=_Part_64_15298594.1278663723367
Content-Type: text/xml; charset=UTF-8
Content-Transfer-Encoding: 8bit
Content-ID: <[email protected]><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:loc="http://www.chinatelecom.com.cn/schema/ctcc/multimedia_messaging/send/v2_2/local">
</soapenv:Envelope>
------=_Part_64_15298594.1278663723367
Content-Type: image/jpeg
Content-Transfer-Encoding: binary
Content-ID: <h1.jpg>
255,216,255,224,0,16,74,70,73,70,0,1,1,1,0,72,0,72,0,0,255,219,0,67,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,255,219,0,67,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,255,192,0,17,8,0,90,1,244,3,1,17,0,2,17,1,3,17,1,255,196,0,30,0,1,1,0,2,2,3,1,1,0,0,0,0,0,0,0,0,0,1,8,9,2,7,4,5,6,3,10,255,196,0,85,16,0,0,5,2,1,8,5,8,6,6,6,7,7,5,0,0,1,2,3,4,5,0,6,7,8,17,18,21,23,83,84,146,19,20,22,33,162,34,49,82,145,150,209,213,225,9,65,81,97,98,210,35,113,129,130,161,226,36,37,50,66,114,240,51,54,85,163,177,193,211,38,52,53,67,134,181,197,68,99,115,178,194,255,196,0,30,1,1,0,2,1,5,1,1,0,0,0,0,0,0,0,0,0,0,1,2,8,3,4,5,6,7,9,10,255,196,0,76,17,0,0,5,1,3,7,6,13,4,2,0,4,3,9,0,0,0,1,2,3,4,5,6,17,18,7,19,21,22,33,81,82,20,49,98,146,161,240,8,34,65,83,97,113,145,149,162,210,212,225,226,50,129,177,209,35,66,9,51,67,114,36,53,178,37,99,118,130,147,182,193,241
------=_Part_64_15298594.1278663723367--jpg部分只是取了一部分数据,太多了,没办法发。