0

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#コードの問題です。ありがとう!!!

4

1 に答える 1

0

0x80004005 は、アクセスが拒否されたことを意味します。したがって、サーバー側の構成のようです。

画像を保存しようとしているパスの権限を確認してください。また、appPool ID またはエンド ユーザーに書き込み権限があることを確認します (asp.net セキュリティ構成/委任設定によって異なります)。

于 2012-07-10T00:31:39.713 に答える