新浪微博--状态发布及图片的上传

#pragma mark 发微博界面:sendStatus
-(void)sendStatus
{

    if ([self.textView.text isEqualToString:@""]) {
        UIAlertView *alter = [[UIAlertView alloc] initWithTitle:@"提示" message:@"您没输入任何东西" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
        [alter show];
    }else if([self textLength:self.textView.text] > 140)
    {
        UIAlertView *alter = [[UIAlertView alloc] initWithTitle:@"提示" message:@"输入文字大于140" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
        [alter show];
    }

    if (self.imageView) {

        // HTTP协议之multipart/form-data请求分析
        NSString *status = self.textView.text ;
        NSData *dataImg = UIImageJPEGRepresentation(self.imageView.image, 0.5);
        NSString *accesstoken = [AccountTool shareAccountTool].currentAcount.accessToken;

        NSString *urlStr = @"https://upload.api.weibo.com/2/statuses/upload.json";
        NSURL *url = [NSURL URLWithString:urlStr];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"POST"];
        //Content-Disposition:form-data;access_token=%@;status=%@;pic=%@

        NSString *nextRow = @"\r\n";
        NSString *boundry = [NSString stringWithFormat:@"------%@",@((int)[[NSDate date] timeIntervalSince1970]).description];
        NSString *start = [@"--" stringByAppendingString:boundry];
        NSString *end = [@"--" stringByAppendingFormat:@"%@--",boundry];
        NSString *acctokenType = @"Content-Disposition: form-data; name=\"access_token\"";

        NSString *statusType = @"Content-Disposition: form-data; name=\"status\"";
        NSString *imageType = @"Content-Disposition: form-data; name=\"pic\"; filename=\"shell.png\"";
        NSString *value = [@"multipart/form-data" stringByAppendingFormat:@";boundary=%@",boundry];
        [request setValue:value forHTTPHeaderField:@"Content-Type"];
        NSMutableData *bodyData = [NSMutableData data];

        // accessToken
        [bodyData appendData:[start dataUsingEncoding:NSUTF8StringEncoding]];
        [bodyData appendData:[nextRow dataUsingEncoding:NSUTF8StringEncoding]];
        [bodyData appendData:[acctokenType dataUsingEncoding:NSUTF8StringEncoding]];
        [bodyData appendData:[nextRow dataUsingEncoding:NSUTF8StringEncoding]];
        [bodyData appendData:[nextRow dataUsingEncoding:NSUTF8StringEncoding]];
        [bodyData appendData:[accesstoken dataUsingEncoding:NSUTF8StringEncoding]];
        [bodyData appendData:[nextRow dataUsingEncoding:NSUTF8StringEncoding]];

        // status
        [bodyData appendData:[start dataUsingEncoding:NSUTF8StringEncoding]];
        [bodyData appendData:[nextRow dataUsingEncoding:NSUTF8StringEncoding]];
        [bodyData appendData:[statusType dataUsingEncoding:NSUTF8StringEncoding]];
        [bodyData appendData:[nextRow dataUsingEncoding:NSUTF8StringEncoding]];
        [bodyData appendData:[nextRow dataUsingEncoding:NSUTF8StringEncoding]];
        [bodyData appendData:[status dataUsingEncoding:NSUTF8StringEncoding]];
        [bodyData appendData:[nextRow dataUsingEncoding:NSUTF8StringEncoding]];

        // pic
        [bodyData appendData:[start dataUsingEncoding:NSUTF8StringEncoding]];
        [bodyData appendData:[nextRow dataUsingEncoding:NSUTF8StringEncoding]];
        [bodyData appendData:[imageType dataUsingEncoding:NSUTF8StringEncoding]];
        [bodyData appendData:[nextRow dataUsingEncoding:NSUTF8StringEncoding]];
        [bodyData appendData:[@"Content-Type:image/png" dataUsingEncoding:NSUTF8StringEncoding]];
        [bodyData appendData:[nextRow dataUsingEncoding:NSUTF8StringEncoding]];
        [bodyData appendData:[nextRow dataUsingEncoding:NSUTF8StringEncoding]];
        [bodyData appendData:dataImg];
        [bodyData appendData:[nextRow dataUsingEncoding:NSUTF8StringEncoding]];

        [bodyData appendData:[end dataUsingEncoding:NSUTF8StringEncoding]];
//
//        NSString *bodyString = [NSString stringWithFormat:@"Content-Disposition:form-data;access_token=%@;status=%@;pic=%@",[AccountTool shareAccountTool].currentAcount.accessToken,status,dataImg];
//        NSData *data = [bodyString dataUsingEncoding:NSUTF8StringEncoding];
        [request setHTTPBody:bodyData];

        AFJSONRequestOperation *op = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
            NSLog(@"发送成功 = %@",JSON);
            //        MBProgressHUD *hud = [MBProgressHUD ]

            // 发送成功 取消发送页
            [self dismissViewControllerAnimated:YES completion:nil];

        } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
            NSLog(@"error  == %@",error);
        }];
        [op start];

    }else{

#warning 发送为微博为"POST"请求
        NSString *status = self.textView.text ;
        NSString *urlStr = @"https://api.weibo.com/2/statuses/update.json";
        NSURL *url = [NSURL URLWithString:urlStr];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"POST"];
        NSString *bodyString = [NSString stringWithFormat:@"%@=%@&status=%@",kAccessToken,[AccountTool shareAccountTool].currentAcount.accessToken,status];
        NSData *data = [bodyString dataUsingEncoding:NSUTF8StringEncoding];
        [request setHTTPBody:data];

        AFJSONRequestOperation *op = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
//            NSLog(@"发送成功 = %@",JSON);

            // 发送成功 取消发送页
            [self dismissViewControllerAnimated:YES completion:nil];

        } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
            NSLog(@"error  == %@",error);
        }];
        [op start];

    }

}

效果如图:

新浪微博--状态发布及图片的上传,布布扣,bubuko.com

时间: 2024-10-11 21:43:14

新浪微博--状态发布及图片的上传的相关文章

Asp.Net 自定义控件实现图片的上传,浏览,Delete功能

4月的时候公司比较闲,就想着自己做点东西,其实主要是为了更加熟悉.Net,毕竟接触的时间不长,趁着有时间想提高提高.不过当我做到图片上传这个功能的时候,就有些停滞不前了,连续写了两天也达不到自己想要的标准.后来公司来活,然后就没有然后了,然而做事总不能半途而废吧~时隔一个多月,趁着这个周末,我再次拾起了这个项目,而首要工作就是攻破这个图片上传控件. 下面说说我的标准是什么子的吧~ 1.最多可以上传三张图片,超过三张有提示. 2.点击图片小图,有图片放大功能,再次点击,图片恢复原来尺寸. 3.在图

Asp.Net 自定义控件实现图片的上传,浏览,删除功能

4月的时候公司比较闲,就想着自己做点东西,其实主要是为了更加熟悉.Net,毕竟接触的时间不长,趁着有时间想提高提高.不过当我做到图片上传这个功能的时候,就有些停滞不前了,连续写了两天也达不到自己想要的标准.后来公司来活,然后就没有然后了,然而做事总不能半途而废吧~时隔一个多月,趁着这个周末,我再次拾起了这个项目,而首要工作就是攻破这个图片上传控件. 下面说说我的标准是什么子的吧~ 1.最多可以上传三张图片,超过三张有提示. 2.点击图片小图,有图片放大功能,再次点击,图片恢复原来尺寸. 3.在图

MVC文件图片ajax上传轻量级解决方案,使用客户端JSAjaxFileUploader插件02-多文件上传

上一篇中,使用客户端jJSAjaxFileUploader插件实现单文件异步上传,本篇实现多文件异步上传. 本篇源码在github,先看效果: ● 上传文件显示进度条. ● 停止上传按钮和关闭缩略图按钮. ● 限制上传文件的类型. ● 限制上传文件的尺寸. ●同时上传多个文件成功后显示缩略图.文件名: ● 点击界面上的删除按钮,界面删除,同步删除文件夹中文件. ● 再点击上传文件,界面追加一行新的缩略图.文件名.删除按钮: □ HomeController 把上传的文件名改成以GUID命名的格式

SpringMvc MultipartFile 图片文件上传

spring-servlet.xml 1 <!-- SpringMVC上传文件时,需要配置MultipartResolver处理器 --> 2 <bean id="multipartResolver" 3 class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 4 <property name="defaultEncoding&qu

android图片压缩上传系列-service篇

本篇文章是继续上篇android图片压缩上传系列-基础篇文章的续篇.主要目的是:通过Service来执行图片压缩任务来讨论如何使用Service,如何处理任务量大的并发问题. 了解下Service 大家都知道如果有费时任务,这时需要将任务放到后台线程中执行,如果对操作的结果需要通过ui展示还需要在任务完成后通知前台更新.当然对于这种情况,大家也可以在Activity中启动线程,在线程中通过Handler和sendMessage来通知Activity并执行更新ui的操作,但是更好的方法是将这些操作

如何有效实现前端压缩图片并上传功能

随着现在手机的像素越来越高,很多照片动辄几兆甚至十几兆,上传后在服务器端压缩已经越来越不能满足当今的需求.这对于许多技术人员来说,处理起来这样的问题往往不知道该怎么下手,那么下面就跟大家讲解一下如何在前端进行图片压缩后上传到服务器. 以上传单张图片为例,多张图片同理,多嵌套一层循环即可.代码实现如下: html: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta

onethink框架 编辑器图片没有上传权限

昨天遇到了一个有点蛋疼的问题,创建了一个用户,但是在添加数据的时候,发现编辑器中的图片上传不能使用老是提示下图的那种提示: 然后自己一直在想,怎么编辑器还要图片上传权限呢,淡淡的忧伤啊.然后自己琢磨了一会,发现自己解决不了.立马到Q群中询问,一问,还真的搞定了.原来是要设置权限,不过这个权限是框架数据中早就有了,我们只需要勾选上就可以了.当然了,我这种情况只适用于直接在框架demo上扩展使用的项目,如果完全是自己编写的,那就要看你们各自的构建是咋样的啦.废话不多说,上图:这下子清净了,搞定,再也

iOS实现视频和图片的上传

关于iOS如何实现视频和图片的上传, 我们先理清下思路 思路: #1. 如何获取图片? #2. 如何获取视频? #3. 如何把图片存到缓存路径中? #4. 如何把视频存到缓存路径中? #5. 如何上传? 接下来, 我们按照上面的思路一步一步实现 首先我们新建一个类, 用来储存每一个要上传的文件uploadModel.h #import <Foundation/Foundation.h> @interface uploadModel : NSObject @property (nonatomic

Html5+asp.net mvc 图片压缩上传

在做图片上传时,大图片如果没有压缩直接上传时间会非常长,因为有的图片太大,传到服务器上再压缩太慢了,而且损耗流量. 思路是将图片抽样显示在canvas上,然后用通过canvas.toDataURL方法得到base64字符串来实现压缩. 废话不多少不多说直接看代码: 本次测试使用了 zepto.min.js 插件,更新版本的下载请点击这里 主要js代码: //图片压缩处理 ; (function () { /** * 加载的时候进行抽样检测 * 在iOS中,大于2M的图片会抽样渲染 */ func