我需要将图像发送到用PHP实现的SOAP Web服务。
服务的WSDL看起来像这样......
<xsd:complexType name="Product">
<xsd:all>
<xsd:element name="ProductId" type="xsd:int"/>
<xsd:element name="Image01" type="xsd:base64Array"/>
</xsd:all>
</xsd:complexType>
当我在C#应用程序中引用此服务时,Image01
使用的数据类型为String
。
如何从磁盘获取图像并以正确的方式发送编码以通过此复杂类型发送?
非常感谢示例代码。
答案 0 :(得分:2)
您可以使用此代码加载Image,转换为Byte []并转换为Base64
Image myImage = Image.FromFile("myimage.bmp");
MemoryStream stream = new MemoryStream();
myImage.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp);
byte[] imageByte = stream.ToArray();
string imageBase64 = Convert.ToBase64String(imageByte);
stream.Dispose();
myImage.Dispose();
答案 1 :(得分:2)
将图片加载到byte[]
类型,然后通过Convert.ToBase64String()
有一个很好的代码示例on this question可以将文件从磁盘加载到byte []
public byte[] StreamToByteArray(string fileName)
{
byte[] total_stream = new byte[0];
using (Stream input = File.Open(fileName, FileMode.Open, FileAccess.Read))
{
byte[] stream_array = new byte[0];
// Setup whatever read size you want (small here for testing)
byte[] buffer = new byte[32];// * 1024];
int read = 0;
while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
{
stream_array = new byte[total_stream.Length + read];
total_stream.CopyTo(stream_array, 0);
Array.Copy(buffer, 0, stream_array, total_stream.Length, read);
total_stream = stream_array;
}
}
return total_stream;
}
所以你只是做
Convert.ToBase64String(this.StreamToByteArray("Filename"));
然后通过网络服务电话传回来。我避免使用Image.FromFile
调用,因此您可以将此示例与其他非图像调用一起使用,以通过Web服务发送二进制信息。但是,如果您希望只使用Image,则将此代码块替换为Image.FromFile()
命令。