zoukankan      html  css  js  c++  java
  • post上传文件

    - (BOOL)sendPhotoToTumblr:(NSString *)photo 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 alloc] initWithObjects:@"email",@"password",@"type",@"caption",nil];
            NSArray *objects = [[NSArray alloc] initWithObjects:
                            [NSString stringWithFormat:@"%@",CFPreferencesCopyAppValue(CFSTR("TumblrEmail"), kCFPreferencesCurrentApplication)],
                            [NSString stringWithFormat:@"%@",CFPreferencesCopyAppValue(CFSTR("TumblrPassword"), kCFPreferencesCurrentApplication)],
                            @"photo", caption, nil];
            NSDictionary *keysDict = [[NSDictionary alloc] initWithObjects:objects forKeys:keys];
            
            //create tumblr photo post
            NSURLRequest *tumblrPost = [self createTumblrRequest:keysDict withData:imageData];
            
            //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];
                    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:@"--%@
    ",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="%@"
    
    ",tempKey] dataUsingEncoding:NSUTF8StringEncoding]];
                    [postBody appendData:[[NSString stringWithFormat:@"%@",[postKeys objectForKey:tempKey]] dataUsingEncoding:NSUTF8StringEncoding]];
                    [postBody appendData:[[NSString stringWithFormat:@"
    --%@
    ",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
            }
    
            //add data field and file data
            [postBody appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name="data"
    "] dataUsingEncoding:NSUTF8StringEncoding]];
            [postBody appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream
    
    "] dataUsingEncoding:NSUTF8StringEncoding]];
            [postBody appendData:[NSData dataWithData:data]];
            [postBody appendData:[[NSString stringWithFormat:@"
    --%@--
    ",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
            
            //add the body to the post
            [tumblrPost setHTTPBody:postBody];
    
            return tumblrPost;
    }

    1. 设置HttpWebRequest的Content-Type,一定boundary,这里是--ABCD

    Content-Type:multipart/form-data;boundary=--ABCD  
    2. post内容,各部分以--ABCD开头,结尾以--ABCD--结尾
    --ABCD 
    Content-Disposition: form-data; name="title" 
     
    Today 
    --ABCD 
    Content-Disposition: form-data; name="1.txt"; filename="C:1.txt" 
    Content-Type: text/plain 
     
    <这里是1.txt文件的内容> 
    --ABCD--  
     
    注意:换行的地方也是要加 的
  • 相关阅读:
    了解AOP
    Struts2 拦截器与Spring AOP的区别
    Spring核心技术之IoC和AOP
    产品经理历险记-2-如何把需求聊得更细
    产品经理历险记-1-记录一次事故
    C# 使用 Lotus notes 公共邮箱发送邮件
    设计模式 5/23 原型模式
    设计模式 4/23 建造者模式
    设计模式 3/23 抽象工厂模式
    设计模式 2/23 工厂模式(二)
  • 原文地址:https://www.cnblogs.com/hereiam/p/4569325.html
Copyright © 2011-2022 走看看