转: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之多图片/文件上传
在分享经验之前,先说点题外话,之前的一个项目涉及到了多图片的上传,本来以为是一个很简单的事情,却着实困扰了我好久,究其原因,一是我不够细心,二是与后台人员的交流不够充分.在此,我想将我的老师常说的一句 ...
随机推荐
- php写入和读取文件内容
function read_file($filename){ // $filename = "/usr/local/something.txt"; $handle = @fopen ...
- 《深入理解Android2》读书笔记(四)
接上篇<深入理解Android2>读书笔记(三) ActivityManagerService(AMS) 1.AMS由ActivityManagerNative(AMN)类派生,并实现Wa ...
- plsql分支,循环,异常
pl/sql 分支,循环和异常分支: DECLARE BEGIN END; 循环:loop,while,for 1.LOOP EXIT WHEN ...
- 最正确的React事件绑定方式
参考这篇文章:Choosing the Best Approach for React Event Handlers 1.function.bind()方式 2.inline arrow functi ...
- Loj#6433「PKUSC2018」最大前缀和(状态压缩DP)
题面 Loj 题解 先转化题意,其实这题在乘了\(n!\)以后就变成了全排列中的最大前缀和的和(有点拗口).\(n\leq20\),考虑状压\(DP\) 考虑一个最大前缀和\(\sum\limits_ ...
- matlab学习之求解函数的根和极小值
只是用来求解函数的部分一个根,具体算法没查询,只是调用自带的函数 代码如下 % 求函数零点和极小值 xiszero=func(0) x=-1:0.1:1.5; y=func(x); plot(x,y) ...
- HTTP Slow Attack测试工具SlowHTTPTest
HTTP Slow Attack测试工具SlowHTTPTest Slow Attack是HTTP常见的一种拒绝服务攻击方式.它通过消耗服务器的系统资源和连接数,导致Web服务器无法正常工作.常见 ...
- Sd - Java多线程
1. Java中线程有哪些同步的方法? 在Java语言中,每个对象都有一个锁,一个线程可以通过关键字synchronized来申请获取某个对象的锁,关键字synchronized可以被用于方法(粗粒度 ...
- [Codeforces-div.1 809C] Find a car
[Codeforces-div.1 809C] Find a car 试题分析 莫名结论:\(a_{i,j}=(i-1) xor (j-1) +1\) 然后分成\(i\space xor\space ...
- 【DFS】算24点
[tyvj2802/RQNOJ74]算24点 描述 几十年前全世界就流行一种数字游戏,至今仍有人乐此不疲.在中国我们把这种游戏称为“算24点”.您作为游戏者将得到4个1~9之间的自然数作为操作数,而您 ...