2012-07-07 148 views
0

嘿,我有下面的代码在Mac应用程序:ASIHttpRequest上传图片

NSURL *url; 
     url = [NSURL URLWithString:@"http://yfrog.com/api/xauth_upload"]; 

     ASIFormDataRequest *request = [[[ASIFormDataRequest alloc] initWithURL:url] autorelease]; 

     [request setDelegate:self]; 
     [request setUseCookiePersistence:NO]; 
     [request setUploadProgressDelegate:self]; 
     [request showAccurateProgress]; 
     [request signRequestWithClientIdentifier:@"w" secret:@"x" tokenIdentifier:@"y" secret:@"z" usingMethod:ASIOAuthHMAC_SHA1SignatureMethod]; 
     [request setPostValue:@"a" forKey:@"key"]; 
    NSData *imageData = [[NSData alloc]initWithContentsOfFile:[draggedFilenames objectAtIndex:0]]; 
    [request setPostValue:imageData forKey:@"media"]; 

     [request startAsynchronous]; 

但问题是,我总是得到yfrog服务器这样的响应:

因此,一些图片上传错误。在iPhone上它的工作原理是这样的:

[request setData:UIImageJPEGRepresentation(picture, 0.8) withFileName:@"filename.jpg" andContentType:@"image/jpeg" forKey:@"media"]; 

但这不起作用可可(MAC),因为有像UIIMageJPEGRepresentation没有方法。 此外认证工作,这不能成为问题。如果你问你这个方法signRequestWithClientIdentifier它来自这里的asihttprequest + oauth包装: https://github.com/keybuk/asi-http-request-oauth

那么我怎样才能正确地上传图像?

非常感谢。

回答

2
NSData* NSImageJPEGRepresentation(NSImage* image, CGFloat compressionQuality) 
{ 
    if(nil == image)return nil; 
    NSDictionary *dict; 
    dict = [NSDictionary dictionaryWithObjectsAndKeys: 
      [NSNumber numberWithFloat:compressionQuality], 
      NSImageCompressionFactor, 
      nil]; 

    NSBitmapImageRep* imageRep; 
    imageRep = [NSBitmapImageRep imageRepWithData:[image TIFFRepresentation]]; 
    return [imageRep representationUsingType:NSJPEGFileType 
            properties:dict]; 
} 
+0

感谢这对我有用;) – dehlen 2012-07-07 16:14:07