iPhoneからサーバーに画像をアップロードしたい画像をアップロードするには、私のコードは
UIImage *image = [UIImage imageNamed:@"bg_DName.png"];
NSMutableData *imageData = (NSData*)UIImagePNGRepresentation(image);
NSString *string = [NSString stringWithFormat:@"http://myServer/HeritageWebServices/Service.asmx/testuploadimage"];
[self setRequest1:[ASIFormDataRequest requestWithURL:[NSURL URLWithString:string]]];
[request1 setPostValue:@"test" forKey:@"value1"];
[request1 setPostValue:@"test" forKey:@"value2"];
[request1 setPostValue:@"test" forKey:@"value3"];
[request1 setTimeOutSeconds:20];
[request1 setDelegate:self];
[request1 setDidFailSelector:@selector(uploadFailed:)];
[request1 setDidFinishSelector:@selector(uploadFinished:)];
[request1 setPostBody:imageData];
// NSLog(@"image %@",imageData);
[request1 setData:imageData withFileName:@"photo.png" andContentType:@"image/png" forKey:@"photo"];
[request1 startAsynchronous];
上記のコードでは、画像をアップロードできません。
UIImage *image = [UIImage imageNamed:@"bg.png"];
NSData *imageData = UIImagePNGRepresentation(image);
//NSLog(@"imageData %@",imageData);
NSString *dt = [[imageData description] stringByTrimmingCharactersInSet:
[NSCharacterSet characterSetWithCharactersInString:@"<>"]];
dt = [dt stringByReplacingOccurrencesOfString:@" " withString:@""];
NSString *string = [NSString stringWithFormat:@"http://myServer/HeritageWebServices/Service.asmx/testuploadimage?image=%@",dt];
// NSLog(@"urlstring %@",string);
request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:string]];
//
[request startAsynchronous];
このようにしようとすると、小さな画像はアップロードできますが、大きな画像はアップロードできません。ここでは、リクエストパラメーターで画像を文字列として送信しています。
画像を受け取るための私のC#コード
[WebMethod]
public byte[] testuploadimage(string image)
{
byte[] imageBytes;
System.Net.HttpWebRequest httpWebRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create("http://myServer/HeritageWebServices/Service.asmx/testuploadimage");
httpWebRequest.Method = "POST";
httpWebRequest.ContentType = "application/octet-stream";
httpWebRequest.ContentLength = image.Length;
XmlDocument login = new XmlDocument();
XmlDeclaration dec = login.CreateXmlDeclaration("1.0", null, null);
login.AppendChild(dec);
XmlElement root = login.CreateElement("CreateUser");
login.AppendChild(root);
//try
//{
string actFolder = Server.MapPath("~/Images/");
string s = image.Replace(" ", string.Empty);
ErrLogMgr.LogErrorMessage(string.Format("{0}{1}", "testuploadimage() for the image :",
image), "testUploadimage Inputs",
ERRORSOURCE.CSASERVICE);
string imgname = DateTime.UtcNow.ToString().Replace(" ", "").Replace("AM", "").Replace("PM", "").Replace("/", "").Replace("-", "").Replace(":", "") + ".png";
// string imgname = DateTime.UtcNow.ToString("yyyyMMddHHmm") + ".png";
// byte[] imageBytes = Convert.FromBase64String(image.Replace(" ","+"));
imageBytes = HexStringToByteArray(s);
MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length);
// MemoryStream ms = new MemoryStream(imageBytes);
// Convert byte[] to Image
// ms.Write(imageBytes, 0, imageBytes.Length);
ErrLogMgr.LogErrorMessage(string.Format("{0}{1}", "testuploadimage() for the image :",
image), "testUploadimage Inputs",
ERRORSOURCE.CSASERVICE);
Image image2 = Image.FromStream(ms);
ErrLogMgr.LogErrorMessage(string.Format("{0}{1}", "testuploadimage() for the image :",
image), "testUploadimage Inputs",
ERRORSOURCE.CSASERVICE);
// System.Drawing.Bitmap image2 = new System.Drawing.Bitmap(ms);
image2.Save(actFolder + imgname);
XmlElement root1 = login.CreateElement("uploaded");
root1.InnerText = "true";
root.AppendChild(root1);
XmlElement root2 = login.CreateElement("path");
root2.InnerText = "http://myServer/HeritageWebServices/Images/" + imgname;
root.AppendChild(root2);
// return login;
return imageBytes;
// }
//catch (Exception ex)
//{
// ErrLogMgr.LogErrorMessage(string.Format("{0}{1}", "testuploadimage() for the image :",
// image), "testUploadimage Inputs",
// ERRORSOURCE.CSASERVICE);
// XmlDocument cd = new XmlDocument();
// cd.LoadXml("<Message>" + ex + "</Message>");
// // return cd;
// return imageBytes;
//}
}
private byte[] HexStringToByteArray(string hexString)
{
int bytesCount = (hexString.Length) / 2;
byte[] bytes = new byte[bytesCount];
for (int x = 0; x < bytesCount; ++x)
{
bytes[x] = Convert.ToByte(hexString.Substring(x * 2, 2), 16);
}
return bytes;
}
}
サーバーで取得している大きな画像の例外については、
System.Runtime.InteropServices.ExternalException (0x80004005): GDI+ で一般的なエラーが発生しました。System.Drawing.Image.Save (文字列ファイル名、ImageCodecInfo エンコーダー、EncoderParameters encodingParams) で System.Drawing.Image.Save (文字列ファイル名、ImageFormat 形式) で System.Drawing.Image.Save (文字列ファイル名) で Heritage.Service。 testuploadimage(文字列画像) –</p>
誰でも私を助けることができます..私が間違っているのは、私のiPhoneコードの問題と私のc#コードの問題です。ありがとう!!!