转: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之多图片/文件上传
在分享经验之前,先说点题外话,之前的一个项目涉及到了多图片的上传,本来以为是一个很简单的事情,却着实困扰了我好久,究其原因,一是我不够细心,二是与后台人员的交流不够充分.在此,我想将我的老师常说的一句 ...
随机推荐
- Django学生管理系统添加学生时,报错Not Found: /POST
最近在学习Django,跟着视频写了一个学生系统,主要是增删改查操作,界面丑的一匹 1.url.py from django.contrib import admin from django.urls ...
- win 10 下面安装 mysql-8.0.12-winx64 的过程
win 10 下面安装 mysql-8.0.12-winx64 的过程 1.官网下载 mysql 2.解压到你要安装的目录 3.在mysql目录D:\Programming\mysql-8.0.12- ...
- POJ 3259 Wormholes【最短路/SPFA判断负环模板】
农夫约翰在探索他的许多农场,发现了一些惊人的虫洞.虫洞是很奇特的,因为它是一个单向通道,可让你进入虫洞的前达到目的地!他的N(1≤N≤500)个农场被编号为1..N,之间有M(1≤M≤2500)条路径 ...
- 洛谷P3916 图的遍历 [图论,搜索]
题目传送门 图的遍历 题目描述 给出 N 个点, M条边的有向图,对于每个点 v ,求 A(v) 表示从点 v 出发,能到达的编号最大的点. 输入输出格式 输入格式: 第1 行,2 个整数 N,M . ...
- 洛谷P3195 [HNOI2008] 玩具装箱 [DP,斜率优化,单调队列优化]
题目传送门 题目描述 P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1...N ...
- 德州扑克AI
德州扑克: 1:outs数,就是所听的牌的数量. 例子: 1:听顺子 4567 outs数就是8,能够成顺子的牌为3和8. 5689 outs数就是4,能够成顺子的牌只有7. 2:听同花 35 ...
- 背包问题(dp基础)
题目描述: 在N件物品取出若干件放在容量为W的背包里,每件物品的体积为W1,W2……Wn(Wi为整数),与之相对应的价值为P1,P2……Pn(Pi为整数).求背包能够容纳的最大价值. Input 第1 ...
- J2EE并发策略控制总结[zz]
本文结合hibernate以及JPA标准,对J2EE当前持久层设计所遇到的几个问题进行总结: 第一:事务并发访问控制策略 当前J2EE项目中,面临的一个共同问题就是如果控制事务的并发访问,虽然有 ...
- 【Vijos 1607】【NOI 2009】植物大战僵尸
https://vijos.org/p/1607 vijos界面好漂亮O(∩_∩)O~~ 对于一个植物x,和一个它保护的植物y,连一条边<x,y>表示x保护y,对于每个植物再向它左方的植物 ...
- luogu P2485 [SDOI2011]计算器
题目描述 你被要求设计一个计算器完成以下三项任务: 1.给定y.z.p,计算y^z mod p 的值: 2.给定y.z.p,计算满足xy ≡z(mod p)的最小非负整数x: 3.给定y.z.p,计算 ...