转:ios的图片文件上传代码
转自: https://gist.github.com/igaiga/1354221
@interface ImageUploader : NSObject { |
NSData *theImage; |
} |
@property (retain) NSData *theImage; |
- (void) syncUpload:(NSData *) uploadImage; |
@end |
#import "ImageUploader.h" |
#define NOTIFY_AND_LEAVE(X) {[self cleanup:X]; return;} |
#define DATA(X) [X dataUsingEncoding:NSUTF8StringEncoding] |
// Posting constants |
#define IMAGE_CONTENT @"Content-Disposition: form-data; name=\"%@\"; filename=\"image.jpg\"\r\nContent-Type: image/jpeg\r\n\r\n" |
#define BOUNDARY @"------------0x0x0x0x0x0x0x0x" |
@implementation ImageUploader |
@synthesize theImage; |
- (void) syncUpload:(NSData *) uploadImage |
{ |
self.theImage = uploadImage; |
[self main]; |
} |
- (void) cleanup: (NSString *) output |
{ |
self.theImage = nil; |
// NSLog(@"******** %@", output); |
} |
- (NSData*)generateFormDataFromPostDictionary:(NSDictionary*)dict |
{ |
id boundary = BOUNDARY; |
NSArray* keys = [dict allKeys]; |
NSMutableData* result = [NSMutableData data]; |
for (int i = 0; i < [keys count]; i++) |
{ |
id value = [dict valueForKey: [keys objectAtIndex:i]]; |
[result appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; |
if ([value isKindOfClass:[NSData class]]) |
{ |
// handle image data |
NSString *formstring = [NSString stringWithFormat:IMAGE_CONTENT, [keys objectAtIndex:i]]; |
[result appendData: DATA(formstring)]; |
[result appendData:value]; |
} |
NSString *formstring = @"\r\n"; |
[result appendData:DATA(formstring)]; |
} |
NSString *formstring =[NSString stringWithFormat:@"--%@--\r\n", boundary]; |
[result appendData:DATA(formstring)]; |
return result; |
} |
// NSOperationQueueによる非同期化を見据えてmainにしています。 |
- (void) main |
{ |
if (!self.theImage) { |
NOTIFY_AND_LEAVE(@"Please set image before uploading."); |
} |
NSString* MultiPartContentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", BOUNDARY]; |
NSMutableDictionary* post_dict = [[NSMutableDictionary alloc] init]; |
[post_dict setObject:@"testimage" forKey:@"filename"]; |
[post_dict setObject:self.theImage forKey:@"data[User][image]"]; |
NSData *postData = [self generateFormDataFromPostDictionary:post_dict]; |
[post_dict release]; |
NSString *baseurl = @"https://example.com/api/upload_image"; |
NSURL *url = [NSURL URLWithString:baseurl]; |
NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url]; |
if (!urlRequest) NOTIFY_AND_LEAVE(@"Error creating the URL Request"); |
[urlRequest setHTTPMethod: @"POST"]; |
[urlRequest setValue:MultiPartContentType forHTTPHeaderField: @"Content-Type"]; |
[urlRequest setHTTPBody:postData]; |
NSError *error; |
NSURLResponse *response; |
NSData* result = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&response error:&error]; |
//NSLog(@"***** result =%@", result); |
if (!result) |
{ |
[self cleanup:[NSString stringWithFormat:@"upload error: %@", [error localizedDescription]]]; |
return; |
} |
// Return results |
NSString *outstring = [[[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding] autorelease]; |
NSLog(@"***** outstring =%@", outstring); |
[self cleanup: outstring]; |
} |
@end |
转:ios的图片文件上传代码的更多相关文章
- PHP 图片文件上传代码
通过 PHP,可以把文件上传到服务器.里面加入一些图片的判断,如果不加判断文件的类型就可以上传任意格式的文件. 为了网站的安全,肯定不让上传php文件,如果有人进入你的后台,上传了一个php文件,你的 ...
- PHP 图片文件上传代码分享
分享下php上传图片文件的一段代码,挺不错的. 通过 PHP,可以把文件上传到服务器.加入一些图片的判断,如果不加判断文件的类型就可以上传任意格式的文件. 当然了,会禁止上传php文件,以及其它程序代 ...
- SpringMvc MultipartFile 图片文件上传
spring-servlet.xml <!-- SpringMVC上传文件时,需要配置MultipartResolver处理器 --> <bean id="multipar ...
- .Net Core 图片文件上传下载
当下.Net Core项目可是如雨后春笋一般发展起来,作为.Net大军中的一员,我热忱地拥抱了.Net Core并且积极使用其进行业务的开发,我们先介绍下.Net Core项目下实现文件上传下载接口. ...
- php文件上传代码解析
php文件上传代码解析 is_uploaded_file() //函数判断指定的文件是否是通过 HTTP POST 上传的,返回一个布尔值. $_FILES['upfile']['tmp_name' ...
- springmvc图片文件上传接口
springmvc图片文件上传 用MultipartFile文件方式传输 Controller package com.controller; import java.awt.image.Buffer ...
- servlet3.0获取参数与文件上传代码示例
转: servlet3.0获取参数与文件上传代码示例 2018年08月26日 20:25:35 苏凯勇往直前 阅读数:98 package com.igeek.servlet; import ...
- PHP代码篇(五)--如何将图片文件上传到另外一台服务上
说,我有一个需求,就是一个临时功能.由于工作开发问题,我们有一个B项目,需要有一个商品添加的功能,涉及到添加商品内容,比如商品名字,商品描述,商品库存,商品图片等.后台商品添加的接口已经写完了,但是问 ...
- iOS分享 - AFNetworking之多图片/文件上传
在分享经验之前,先说点题外话,之前的一个项目涉及到了多图片的上传,本来以为是一个很简单的事情,却着实困扰了我好久,究其原因,一是我不够细心,二是与后台人员的交流不够充分.在此,我想将我的老师常说的一句 ...
随机推荐
- 洛谷P2127 序列排序 [贪心]
题目传送门 题目描述 小C有一个N个数的整数序列,这个序列的中的数两两不同.小C每次可以交换序列中的任意两个数,代价为这两个数之和.小C希望将整个序列升序排序,问小C需要的最小代价是多少? 输入输出格 ...
- go chapter 8 - 初始化对象
http://blog.haohtml.com/archives/14239 struct定义的属性如果是小写开头的,那么该属性不是public的,不能跨包调用 (implicit assignmen ...
- Java使用Redis初探
Redis的相关概念不做介绍了,大家也可以先了解下Memcached,然后比较下二者的区别,就会有个整体的印象. 服务器端通常选择Linux , Redis对于linux是官方支持的,使用资料很多,需 ...
- 30、Flask实战第30天:cms模版抽离和个人信息页面完成
cms模版抽离 新建一个cms_base.html文件作为基础模板,把cms_index.html的内容拷贝到cms_base.html中. 编辑 cms_base.html,把在不同页面会变动的部分 ...
- 【贪心】【堆】AtCoder Grand Contest 018 C - Coins
只有两维的时候,我们显然要按照Ai-Bi排序,然后贪心选取. 现在,也将人按照Ai-Bi从小到大排序,一定存在一个整数K,左侧的K个人中,一定有Y个人取银币,K-Y个人取铜币: 右侧的X+Y+Z-K个 ...
- 【穷竭】POJ3187-Backward Digit Sums
[思路] 利用杨辉三角形,每一个数字被加的次数等于它在杨辉三角形中对应的那个数字.注意这道题的意思是,最底层是N的全排序,而不是指1..10都可以.生成杨辉三角形的时候第一次我用了二重循环模拟生成,后 ...
- Java 导出大批量数据excel(百万级)(转载)
参考资料:http://bbs.51cto.com/thread-1074293-1-1.html http://bbs.51cto.com/viewthread.ph ...
- KNN算法实现手写数字
from numpy import * import operator from os import listdir def classify0(inX, dataSet, labels, k): d ...
- GG同步到sqlserver报错一例 Invalid date format
在将Oracle表同步到sqlserver时,在sqlserver端应用数据时,可能会遇到这个报错. 2014-05-17 17:20:24 WARNING OGG-01154 SQL error - ...
- html在线美化网站
Html在线美化压缩/转js - 在线工具 地址:http://tool.lu/html/ 1.美化效果: 2.转化字符串拼接