【问题标题】:HTTP POST to Imageshack到 Imageshack 的 HTTP POST
【发布时间】:2009-05-31 02:06:49
【问题描述】:

我目前正在通过 HTTP POST 将图像上传到我的服务器。使用下面的代码一切正常。

NSString *UDID = md5([UIDevice currentDevice].uniqueIdentifier);
NSString *filename = [NSString stringWithFormat:@"%@-%@", UDID, [NSDate date]];
NSString *urlString = @"http://taptation.com/stationary_data/index.php";
request= [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:[NSURL URLWithString:urlString]];
[request setHTTPMethod:@"POST"];
NSString *boundary = @"---------------------------14737809831466499882746641449";
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
[request addValue:contentType forHTTPHeaderField: @"Content-Type"];
NSMutableData *postbody = [NSMutableData data];
[postbody appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[postbody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"userfile\"; filename=\"%@.jpg\"\r\n", filename] dataUsingEncoding:NSUTF8StringEncoding]];
[postbody appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[postbody appendData:[NSData dataWithData:imageData]];
[postbody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPBody:postbody];

NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];
NSLog(returnString);

但是,当我尝试将其转换为使用 Image Shacks XML API 时,它不会返回任何内容。 ImageShack 的说明如下。

通过 POST 将以下变量发送到 imageshack。我们/index.php

文件上传; (图片) xml =“是”; (指定 XML 的返回) 曲奇饼; (注册码,可选)

有人知道我应该从这里去哪里吗?

【问题讨论】:

    标签: iphone cocoa-touch imageshack


    【解决方案1】:

    您可能要考虑使用ASIHTTPRequest,因为它会为您构建一个表单数据发布正文,并且可以减少很多麻烦,并且可以从磁盘流式传输请求正文,因此您可以在上传大图像时节省内存。

    一个快速的谷歌发现this,这似乎表明你应该发布到/upload_api.php而不是/index.php。

    这样的事情可能是一个好的开始:

    ASIFormDataRequest *request = [[[ASIFormDataRequest alloc] initWithUrl:[NSURL URLWithString:@"http://www.imageshack.us/upload_api.php"]] autorelease];
    [request setFile:@"/path/to/file" forKey:@"fileupload"];
    [request setPostValue:@"yes" forKey:@"xml"];
    [request setPostValue:@"blahblah" forKey:@"cookie"];
    //It looks as though you probably need these too
    [request setPostValue:@"me@somewhere.com" forKey:@"email"];
    [request setPostValue:@"blah" forKey:@"key"];
    [request start];
    if ([request error]) {
        NSLog(@"%@",[request error]);
    } else {
        NSLog([request responseString]); // The xml that got sent back
    }
    

    警告:未经测试!

    我使用了同步请求,因为您使用了,但您几乎可以肯定应该使用异步请求(带有 ASIHTTPRequest 的队列)。

    【讨论】:

      【解决方案2】:

      花了我一段时间,但你需要使用 ASIHTTPREQUEST!

      - (void)uploadToImageShack {
      NSAutoreleasePool *paul = [[NSAutoreleasePool alloc] init];
      UIImage *tempImage = self.selectedimage;
      ASIFormDataRequest *request = [[[ASIFormDataRequest alloc] initWithURL:[NSURL URLWithString:@"http://www.imageshack.us/upload_api.php"]] autorelease];
      NSData *imageData = UIImagePNGRepresentation(tempImage);
      [request setFile:imageData withFileName:@"image" andContentType:@"image/png" forKey:@"fileupload"];
      [request setPostValue:@"yes" forKey:@"xml"];
      [request setPostValue:@"3ZQ7C09K708fce677d9cadee04811cfcbdf63361" forKey:@"key"];
      [request setUseCookiePersistence:NO];
      [request startSynchronous];
      NSError *error = [request error];
      if (error) {
          UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:[error localizedDescription] delegate:nil cancelButtonTitle:@"Dismiss" otherButtonTitles:nil];
          [alert show];
          [alert release];
      }
      else if (!error) {
          if ([request responseString]) {
              parser = [[NSXMLParser alloc] initWithData:[[NSData alloc] initWithData:[request responseData]]];
              [parser setDelegate:self];
              [parser parse];
          }
      }   
      [paul drain];
      }
      

      【讨论】:

        猜你喜欢
        • 2012-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-22
        • 1970-01-01
        • 2016-02-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多