Загрузить изображение на сервер С# с iPhone

Я хочу загрузить изображение на свой сервер с 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];

Если я попробую так, я смогу загрузить маленькое изображение, но не большие изображения. Здесь я отправляю изображение в параметре запроса в виде строки.

Мой код С# для получения изображения

[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 encoderParams) в System.Drawing.Image.Save(строковое имя файла, формат ImageFormat) в System.Drawing.Image.Save(строковое имя файла) в Heritage.Service. testuploadimage (строка изображения) –

Может ли кто-нибудь помочь мне .. Что я делаю неправильно? Проблема с моим кодом iPhone с моим кодом С#. Спасибо!!!


person Surender Rathore    schedule 09.07.2012    source источник
comment
Вам нужно добавить, какое исключение вы получаете на сервере или ошибку на клиенте. Кроме того, код сервера вообще попадает? Отследить, зарегистрировать, прикрепить, что-нибудь...   -  person bryanmac    schedule 09.07.2012
comment
Это исключение, которое я получаю, если загружаю большой файл изображения. System.Runtime.InteropServices.ExternalException (0x80004005): в GDI+ произошла общая ошибка. в System.Drawing.Image.Save(строковое имя файла, кодировщик ImageCodecInfo, EncoderParameters encoderParams) в System.Drawing.Image.Save(строковое имя файла, формат ImageFormat) в System.Drawing.Image.Save(строковое имя файла) в Heritage.Service. testuploadimage (строковое изображение)   -  person Surender Rathore    schedule 09.07.2012
comment
@SurenderRathore - Обновите свой вопрос с исключением. Похоже, проблема в коде на стороне сервера.   -  person Security Hound    schedule 09.07.2012
comment
да, похоже на проблему на стороне сервера (конфигурация). посмотри мой ответ   -  person bryanmac    schedule 10.07.2012


Ответы (1)


0x80004005 означает отказ в доступе. Итак, похоже, это конфигурация на стороне сервера.

Посмотрите на права доступа к пути, под которым вы пытаетесь сохранить изображение. Также убедитесь, что у удостоверения appPool или у конечного пользователя есть права на запись (зависит от вашей конфигурации/делегирования безопасности asp.net).

person bryanmac    schedule 10.07.2012
comment
Спасибо за ответ ... это исключение возникает только в том случае, если я отправляю большое изображение ... что мне делать, чтобы решить эту проблему ... - person Surender Rathore; 10.07.2012