1

C# で記述された Web フォーム アプリケーションがあり、ユーザーが画像を含む HTML フォームを送信した後、その画像を C# で記述された WCF Rest サービスに送信します。問題は、Web サービスで画像を取得すると、これが破損していることです。

問題はファイルを適切にエンコードしていないことだと思いますが、インターネットで何日も読んだ後、手がかりが見つかりませんでした。

ウェブフォーム コード:

protected void Page_Load(object sender, EventArgs e)
{
     HttpPostedFile image = Request.Files["imagen"];
     string serverResponse = Send("mywebservice/postimage", "POST", Encoding.UTF8.GetBytes(StreamToString(image.InputStream)));
}

編集(この方法でうまくいきました)

protected void Page_Load(object sender, EventArgs e)
{
     HttpPostedFile image = Request.Files["imagen"];
     MemoryStream ms = new MemoryStream();
     image.InputStream.CopyTo(ms);
     byte[] bytes = ms.ToArray();
     string serverResponse = Send("mywebservice/postimage", "POST", bytes);
}


public int Send(string url, string method, byte[] data)
{
    string serverResponse = "";
    HttpWebRequest newRequest = (HttpWebRequest)WebRequest.Create(url);

    newRequest.ContentType = "image/jpeg";
    newRequest.Method = method;
    newRequest.Timeout = 10000;


    if (newRequest.Method == "POST" || newRequest.Method == "PUT")
    {
        Stream reqStream = newRequest.GetRequestStream();
        reqStream.Write(data, 0, data.Length);
        reqStream.Close();         
    }

    WSMessageEnt wsMessageEnt = new WSMessageEnt();

    try
    {
        HttpWebResponse webResponse;
        webResponse = (HttpWebResponse)newRequest.GetResponse();
        Stream dataStream = webResponse.GetResponseStream();
        serverResponse = new StreamReader(dataStream).ReadToEnd();

    }
    catch (WebException we)
    {

    }

    return serverResponse;
}

public static string StreamToString(Stream data)
{
    StreamReader reader = new StreamReader(data);
    string body = reader.ReadToEnd();
    reader.Close();
    reader.Dispose();

    return body;
}

Web サービス コード:

[WebInvoke(UriTemplate = "upload-user-image", Method = "POST")]
public Stream UploadUserImage(Stream streamdata)
{
     System.Drawing.Image img = System.Drawing.Image.FromStream(streamImagen, true);
     // here I get a format error
}
4

1 に答える 1

1

考えられる問題の 1 つは、バイト ストリームを文字列に変換してから、バイト ストリームに戻すことです。画像バイトは任意のバイトであり、文字列にマップされる場合とマップされない場合があり、1 つの変換 (Encoding.Default) で使用しているエンコードは、別の変換 (Encoding.UTF8) で使用されているものと同じではない場合があります。

これを行う代わりに:

Encoding.UTF8.GetBytes(StreamToString(image.InputStream))

のようなことをしてみてください

MemoryStream ms = new MemoryStream();
image.InputStream.CopyTo(ms);
byte[] bytes = ms.ToArray();

または、ストリームを渡してSendリクエスト ストリームにコピーするだけです。

于 2012-10-30T17:24:28.970 に答える