안녕하세요, 현재 웹 요청, 메모리 스트림 및 이미지 객체를 사용하여 웹 서버에 이미지 파일을 보내려고합니다.C# 이미지 요청 객체를 웹 요청으로 보냅니다.
이 요청을 보내는 내 현재의 방법이다 :
public void Send(Image image)
{
//Assign the request here too, just in case
Request = (HttpWebRequest)WebRequest.Create(FormURL);
Request.Method = "POST";
Request.ContentType = "multipart/form-data; boundary=" + CONTENT_BOUNDARY;
Request.Headers.Add("Cache-Control", "no-cache");
Request.KeepAlive = true;
Request.ContentLength = GetFormElements().Length +
GetFileHeader(FileName).Length +
FILE_TRAIL.Length +
ConvertImageToByteArray(image).Length;
//Must be done in this order for stream to write properly:
//----
//Form elements
//File header
//Image
//File trailer
//----
WriteStringToStream(FileStream, GetFormElements());
WriteStringToStream(FileStream, GetFileHeader(FileName));
WriteImageToStream(FileStream, image);
WriteStringToStream(FileStream, FILE_TRAIL);
string PostData = ASCIIEncoding.ASCII.GetString(ConvertImageToByteArray(image));
StreamWriter SW = new StreamWriter(Request.GetRequestStream(), Encoding.ASCII);
SW.Write(PostData);
GetRequestResponse();
Console.WriteLine(Request.HaveResponse);
FileStream.Close();
Request = null;
}
난 데 문제는 내가 일하는 모습되는 스트림에도 불구하고, 모든 서버에서 모든 응답을받지 못했습니다이다 올바른 길이
필요한 경우, 나는 내 수업의 다른 부분을 게시 할 수 있습니다 (나는 위의 코드에서 일부 디버그 출력을 제거),하지만 지금 여기를 쓰기 기능은 다음과 같습니다
WriteStringToStream :
,private void WriteStringToStream(System.IO.MemoryStream stream, string String)
{
byte[] PostData = System.Text.Encoding.ASCII.GetBytes(String);
stream.Write(PostData, 0, PostData.Length);
}
WriteImageToSteam :
private void WriteImageToStream(System.IO.MemoryStream Stream, Image img)
{
Stream.Write(ConvertImageToByteArray(img), 0, ConvertImageToByteArray(img).Length);
}
ConvertImageToByteArray :
"하여 FileStream"의 목적은 무엇private Byte[] ConvertImageToByteArray(Image img)
{
//Method taken from http://www.csharp-station.com/Articles/Thumbnails.aspx and adapted
MemoryStream memStream = new MemoryStream();
img.Save(memStream, System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] byteArray = new Byte[memStream.Length];
memStream.Position = 0;
memStream.Read(byteArray, 0, (int)memStream.Length);
return byteArray;
}
, 당신은) (memStream.ToArray을 반환 프랑수아 수있다; 배열을 선언하고 그 안에 스트림을 읽는 대신에. – SLaks
GetRequestResponse에 어떤 코드가 있습니까? – SLaks
WriteImageToStream에서 ConvertImageToByteArray를 두 번 호출하면 안됩니다. 다소 느려질 것입니다. 대신, 바이트 배열을 선언하고 Length 속성을 읽으십시오. – SLaks