2

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# アプリケーションでこのサービスを参照すると、使用されるデータ型Image01String.

ディスクから画像を取得し、正しい方法でエンコードして送信し、この複合型を介して送信するにはどうすればよいですか?

サンプルコードをいただければ幸いです。

4

2 に答える 2

2

byte[]画像をタイプにロードしてから、Convert.ToBase64String()

この質問には、ファイルをディスクからバイトにロードするための素敵なコードのサンプルがあります[]

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"));

そして、Web サービス呼び出しを介してそれを返します。この呼び出しを使用しないようにしたImage.FromFileので、この例を他の画像以外の呼び出しで再利用して、Web サービス経由でバイナリ情報を送信できます。ただし、イメージのみを使用する場合は、このコード ブロックをImage.FromFile()コマンドに置き換えます。

于 2012-06-30T10:13:15.317 に答える
2

このコードを使用して、イメージをロードし、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();
于 2012-06-30T10:05:56.273 に答える