douban-objc-client icon indicating copy to clipboard operation
douban-objc-client copied to clipboard

如何发一条广播,既有文字又有图片?冰天雪地跪求答案。。

Open KittenYang opened this issue 10 years ago • 2 comments

是使用:

  • (DOUHttpRequest *)post:(DOUQuery *)query postBody:(NSString *)body callback:(DOUReqBlock)block;

还是在

  • (id)initWithSubPath:(NSString *)aSubPath parameters:(NSDictionary *)theParameters; 使用中的参数?

求回答!

KittenYang avatar Jan 25 '15 16:01 KittenYang

这个我具体没试过, 能传多个参数应该就行 http://developers.douban.com/wiki/?title=shuo_v2

wuzhou avatar Jan 26 '15 00:01 wuzhou

于是我自己用iOS原生的方法完成了即可以发图片也可以发文字的功能,现贴出来供以后有相同需求找到这里的朋友一个参考。

NSString *charset = (NSString *)CFStringConvertEncodingToIANACharSetName(CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding));
    CFUUIDRef uuid = CFUUIDCreate(nil);
    NSString *uuidString = (NSString*)CFBridgingRelease(CFUUIDCreateString(nil, uuid));
    CFRelease(uuid);
    NSString *stringBoundary = [NSString stringWithFormat:@"0xKhTmLbOuNdArY-%@",uuidString];
    NSString *endItemBoundary = [NSString stringWithFormat:@"\r\n--%@\r\n",stringBoundary];
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"https://api.douban.com/shuo/v2/statuses/"]];
    [request setHTTPMethod:@"POST"];
    [request setValue:[NSString stringWithFormat:@"multipart/form-data; charset=%@; boundary=%@", charset, stringBoundary] forHTTPHeaderField:@"Content-Type"];


    NSString *bearerToken = [NSString stringWithFormat:@"Bearer %@",     [[[NSUserDefaults standardUserDefaults] objectForKey:@"DoubanAuthData"] objectForKey:@"accessToken"]];

    NSLog(@"dbAccessToken:%@",[[[NSUserDefaults standardUserDefaults] objectForKey:@"DoubanAuthData"] objectForKey:@"accessToken"]);

    [request setValue:bearerToken forHTTPHeaderField:@"Authorization"];

    //  -- 对要POST的数据进行编码并设置HTTP请求的BODY --
    // 开头的boundary:
    // --KhTmLbOuNdArY
    NSMutableData *postData = [[NSMutableData alloc] init];
    [postData appendData:[[NSString stringWithFormat:@"--%@\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];

    // source参数对应的key和内容:
    // Content-disposition: form-data; name="source"
    //
    // AppKey对应的内容
    NSString *kSource = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"source\"\r\n\r\n"];
    [postData appendData:[kSource dataUsingEncoding:NSUTF8StringEncoding]];
    NSString *vSource = [NSString stringWithFormat:@"source=%@", kDBAppKey];
    [postData appendData:[vSource dataUsingEncoding:NSUTF8StringEncoding]];

    // 分割字段内容的boundary:
    // --KhTmLbOuNdArY
    [postData appendData:[endItemBoundary dataUsingEncoding:NSUTF8StringEncoding]];

    // text参数对应的key和内容:
    // Content-disposition: form-data; name="text"
    //
    // 要发送的广播内容
    NSString *kText = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"text\"\r\n\r\n"];
    [postData appendData:[kText dataUsingEncoding:NSUTF8StringEncoding]];
    NSString *vText = self.textView.text;
    [postData appendData:[vText dataUsingEncoding:NSUTF8StringEncoding]];

    // 分割字段内容的boundary:
    // --KhTmLbOuNdArY
    [postData appendData:[endItemBoundary dataUsingEncoding:NSUTF8StringEncoding]];

    // image参数对应的key和内容:
    // content-disposition: form-data; name="image"; filename="WW.jpg"
    // Content-Type: image/png
    //
    // ... contents of 图片 ...
    NSString *kImage = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"image\"; filename=\"recipe.jpg\"\r\n"];
    [postData appendData:[kImage dataUsingEncoding:NSUTF8StringEncoding]];
    NSString *tImage = [NSString stringWithFormat:@"Content-Type: %@\r\n\r\n", @"image/jpeg"];
    [postData appendData:[tImage dataUsingEncoding:NSUTF8StringEncoding]];
    UIImage *pickedImage = self.imgView.image;
    NSData *imageData = UIImageJPEGRepresentation(pickedImage, 0.0); // jpg格式,1.0表示最大压缩,0.0表示图像无压缩
    [postData appendData:imageData];

    // 结尾的boundary
    // --KhTmLbOuNdArY--
    [postData appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];


    //  -- 设置HTTP的BODY和请求头中的Content-Length --
    NSString *length = [NSString stringWithFormat:@"%lu", (unsigned long)[postData length]];
    [request setValue:length forHTTPHeaderField:@"Content-Length"];
    [request setHTTPBody:postData];
//     NSLog(@"sendBody:%@",postData);

    NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
    if (connection) {
        [connection start];
    }

KittenYang avatar Jan 28 '15 10:01 KittenYang