Frage

Hallo, ich habe mit dem Status -Update im Tumbler geführt, aber ich habe Probleme, wenn ich ein Foto in Form von Daten sende, wie unten gezeigt.

-(IBAction)sendPhoto
{
    NSString *email           = @"user_name@gmail.com";
    NSString *password        = @"password";
    NSString *sendType = @"photo";

    UIImage *imageMS = [UIImage imageNamed:@"Submit.png"];
    NSData *photoData = [[NSData alloc] initWithData:UIImagePNGRepresentation(imageMS)];

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc]
                                initWithURL:[NSURL URLWithString:@"http://www.tumblr.com/api/write"]];
    [request setHTTPMethod:@"POST"];
    NSString *request_body = [NSString 
            stringWithFormat:@"email=%@&password=%@&type=%@&data=%@",
            [email           stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],
            [password        stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],
            [sendType        stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],
            photoData];
    [request setHTTPBody:[request_body dataUsingEncoding:NSUTF8StringEncoding]];
    [web loadRequest:request];
}

Aber es wird nicht aktualisiert. Wieso den?

War es hilfreich?

Lösung

Meine ursprüngliche Antwort erwies sich als falsch, aber das OP hat einen Link zu Code veröffentlicht, den er sagte, sein Problem habe behoben. Ich habe diesen Code unten kopiert, damit zukünftige Sucher leicht finden können, da ich weiß, wie frustrierend es sein kann, Ihr Problem beschrieben zu sehen und einen Link zur Lösung zu finden, nur um diesen Link tot zu sein.

Code basierend auf http://forums.macrumors.com/showthread.php?t=427513:

- (BOOL)sendPhotoToTumblr:(NSString *)photo usingEmail:(NSString *)tumblrEmail andPassword:(NSString *)tumblrPassword withCaption:(NSString *)caption;
{
    //get image data from file
    NSData *imageData = [NSData dataWithContentsOfFile:photo];  
    //stop on error
    if (!imageData) return NO;

    //Create dictionary of post arguments
    NSArray *keys = [NSArray arrayWithObjects:@"email",@"password",@"type",@"caption",nil];
    NSArray *objects = [NSArray arrayWithObjects:
            tumblrEmail,
            tumblrPassword,
            @"photo", caption, nil];
    NSDictionary *keysDict = [[NSDictionary alloc] initWithObjects:objects forKeys:keys];

    //create tumblr photo post
    NSURLRequest *tumblrPost = [self createTumblrRequest:keysDict withData:imageData];
    [keysDict release];     

    //send request, return YES if successful
    tumblrConnection = [[NSURLConnection alloc] initWithRequest:tumblrPost delegate:self];
    if (!tumblrConnection) {
        NSLog(@"Failed to submit request");
        return NO;
    } else {
        NSLog(@"Request submitted");
        receivedData = [[NSMutableData data] retain];
            [tumblrConnection release];
        return YES;
    }
}


-(NSURLRequest *)createTumblrRequest:(NSDictionary *)postKeys withData:(NSData *)data
{
    //create the URL POST Request to tumblr
    NSURL *tumblrURL = [NSURL URLWithString:@"http://www.tumblr.com/api/write"];
    NSMutableURLRequest *tumblrPost = [NSMutableURLRequest requestWithURL:tumblrURL];
    [tumblrPost setHTTPMethod:@"POST"];

    //Add the header info
    NSString *stringBoundary = [NSString stringWithString:@"0xKhTmLbOuNdArY"];
    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",stringBoundary];
    [tumblrPost addValue:contentType forHTTPHeaderField: @"Content-Type"];

    //create the body
    NSMutableData *postBody = [NSMutableData data];
    [postBody appendData:[[NSString stringWithFormat:@"--%@\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];

    //add key values from the NSDictionary object
    NSEnumerator *keys = [postKeys keyEnumerator];
    int i;
    for (i = 0; i < [postKeys count]; i++) {
        NSString *tempKey = [keys nextObject];
        [postBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n",tempKey] dataUsingEncoding:NSUTF8StringEncoding]];
        [postBody appendData:[[NSString stringWithFormat:@"%@",[postKeys objectForKey:tempKey]] dataUsingEncoding:NSUTF8StringEncoding]];
        [postBody appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
    }

    //add data field and file data
    [postBody appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"data\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
    [postBody appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
    [postBody appendData:[NSData dataWithData:data]];
    [postBody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];

    //add the body to the post
    [tumblrPost setHTTPBody:postBody];

    return tumblrPost;
}

Ich habe den obigen Code geändert, um einige Speicherprobleme zu beseitigen und einige Parameter hinzuzufügen, um diese zu einer generischer/flexibleren Lösung zu machen. Wenn jedoch jemand den Originalcode wünscht, wie auf dieser Website veröffentlicht wird, schauen Sie einfach die Bearbeitungsrevisionen dieser Antwort durch.

Andere Tipps

Als zukünftige Referenz, Asihttprequest'S AsiformDatRequest macht so etwas viel einfacher.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top