0

基本的に私はファイルをアップロードできるサーバーを持っていますが、ログインが必要なので、アップロードするファイルだけでなく、ユーザー名とパスワードも文字列として送信し、からの応答を読み取る必要があります。サーバ。最善を尽くしましたが、「[Begin]GetResponseを呼び出す前にContentLengthバイトをリクエストストリームに書き込む必要があります」というエラーが表示されます。

画像をアップロードするための私のコード:

string ImgFile = Path.GetTempFileName();
img.Save(ImgFile);

byte[] LoginBytes = ASCIIEncoding.ASCII.GetBytes("username=" + Username + "&password=" + Password);
byte[] ImageBytes = File.ReadAllBytes(ImgFile);
int ByteLen = LoginBytes.Length + ImageBytes.Length;

WebRequest ReqResponse = WebRequest.Create(url);
ReqResponse.Credentials = CredentialCache.DefaultCredentials;
ReqResponse.Proxy = WebRequest.DefaultWebProxy;
ReqResponse.Proxy.Credentials = CredentialCache.DefaultCredentials;
ReqResponse.Method = "POST";
ReqResponse.ContentType = "application/x-www-form-urlencoded";
ReqResponse.ContentLength = ByteLen;

ReqResponse.GetRequestStream().Write(LoginBytes, 0, LoginBytes.Length);
ReqResponse.GetRequestStream().Write(ImageBytes, 0, ImageBytes.Length);

string response = (new StreamReader(ReqResponse.GetResponse().GetResponseStream()).ReadToEnd());
MessageBox.Show(response);
4

1 に答える 1

0

多分それは2つの投稿が好きではありませんか?それらを連結して一度に送信できます。

void Main()
{
byte[] login = BitConverter.GetBytes("loginstring");
byte[] img = BitConverter.GetBytes("fakeimagedataherereplacewithrealbytes");
byte[] tosend = login.Concat(img).ToArray();
using(WebRequest wr = WebRequest.Create("someurl"))
{
    using (Stream rs = wr.GetRequestStream())
    {
        rs.Write(LoginBytes, 0, LoginBytes.Length);
        //...whatever
    }

}

}

于 2013-03-11T20:32:47.857 に答える