第二篇 上传图片和Base64编码
来源:互联网 发布:赶集经纪人端口 编辑:程序博客网 时间:2024/05/18 02:45
1用ASIHTTPRequest 上传图片
服务器要求上传的json格式,所以 直接把图片的data通过Base64编码,转换成string,放入body中,然后上传。
Base64编码的方法(没有仔细研究,先记下来)
{
NSString *encoding = nil;
unsigned char *encodingBytes = NULL;
@try {
static char encodingTable[64] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
static NSUInteger paddingTable[] = {0,2,1};
// Table 1: The Base 64 Alphabet
//
// Value Encoding Value Encoding Value Encoding Value Encoding
// 0 A 17 R 34 i 51 z
// 1 B 18 S 35 j 52 0
// 2 C 19 T 36 k 53 1
// 3 D 20 U 37 l 54 2
// 4 E 21 V 38 m 55 3
// 5 F 22 W 39 n 56 4
// 6 G 23 X 40 o 57 5
// 7 H 24 Y 41 p 58 6
// 8 I 25 Z 42 q 59 7
// 9 J 26 a 43 r 60 8
// 10 K 27 b 44 s 61 9
// 11 L 28 c 45 t 62 +
// 12 M 29 d 46 u 63 /
// 13 N 30 e 47 v
// 14 O 31 f 48 w (pad) =
// 15 P 32 g 49 x
// 16 Q 33 h 50 y
NSUInteger dataLength = [data length];
NSUInteger encodedBlocks = (dataLength * 8) / 24;
NSUInteger padding = paddingTable[dataLength % 3];
if( padding > 0 ) encodedBlocks++;
NSUInteger encodedLength = encodedBlocks * 4;
encodingBytes = malloc(encodedLength);
if( encodingBytes != NULL ) {
NSUInteger rawBytesToProcess = dataLength;
NSUInteger rawBaseIndex = 0;
NSUInteger encodingBaseIndex = 0;
unsigned char *rawBytes = (unsigned char *)[data bytes];
unsigned char rawByte1, rawByte2, rawByte3;
while( rawBytesToProcess >= 3 ) {
rawByte1 = rawBytes[rawBaseIndex];
rawByte2 = rawBytes[rawBaseIndex+1];
rawByte3 = rawBytes[rawBaseIndex+2];
encodingBytes[encodingBaseIndex] = encodingTable[((rawByte1 >> 2) & 0x3F)];
encodingBytes[encodingBaseIndex+1] = encodingTable[((rawByte1 << 4) & 0x30) | ((rawByte2 >> 4) & 0x0F) ];
encodingBytes[encodingBaseIndex+2] = encodingTable[((rawByte2 << 2) & 0x3C) | ((rawByte3 >> 6) & 0x03) ];
encodingBytes[encodingBaseIndex+3] = encodingTable[(rawByte3 & 0x3F)];
rawBaseIndex += 3;
encodingBaseIndex += 4;
rawBytesToProcess -= 3;
}
rawByte2 = 0;
switch (dataLength-rawBaseIndex) {
case 2:
rawByte2 = rawBytes[rawBaseIndex+1];
case 1:
rawByte1 = rawBytes[rawBaseIndex];
encodingBytes[encodingBaseIndex] = encodingTable[((rawByte1 >> 2) & 0x3F)];
encodingBytes[encodingBaseIndex+1] = encodingTable[((rawByte1 << 4) & 0x30) | ((rawByte2 >> 4) & 0x0F) ];
encodingBytes[encodingBaseIndex+2] = encodingTable[((rawByte2 << 2) & 0x3C) ];
// we can skip rawByte3 since we have a partial block it would always be 0
break;
}
// compute location from where to begin inserting padding, it may overwrite some bytes from the partial block encoding
// if their value was 0 (cases 1-2).
encodingBaseIndex = encodedLength - padding;
while( padding-- > 0 ) {
encodingBytes[encodingBaseIndex++] = '=';
}
encoding = [[NSString alloc] initWithBytes:encodingBytes length:encodedLength encoding:NSASCIIStringEncoding];
}
}
@catch (NSException *exception) {
encoding = nil;
NSLog(@"WARNING: error occured while tring to encode base 32 data: %@", exception);
}
@finally {
if( encodingBytes != NULL ) {
free( encodingBytes );
}
}
return encoding;
}
2用ASIFormDataRequest上传 直接把(NSMutableData)Data 赋值给postBody就OK了
NSData *data = UIImagePNGRepresentation(image);//获取图片数据
//ASIFormDataRequest 的setPostBody 方法需求的为NSMutableData类型
NSMutableData *imageData = [NSMutableData dataWithData:data];
NSURL *url = [NSURL URLWithString:@"http://*******"];
ASIFormDataRequest *request = [[ASIFormDataRequest alloc] initWithURL:url];
[request setDelegate:self];//代理
[request setRequestMethod:@"POST"];
[request setPostBody:imageData];
[request addRequestHeader:@"Content-Length" value:[NSString stringWithFormat:@"%d",[url length]]];
[request startAsynchronous];
[request setDidFinishSelector:@selector(finishRequest)];//当成功后会自动触发 headPortraitSuccess 方法
[request setDidFailSelector:@selector(failRequest)];//如果失败会 自动触发 headPortraitFail 方法
[request release];
- 第二篇 上传图片和Base64编码
- iOS 图片base64编码 上传
- 采用base64编码上传图片
- base64编码图片上传不了
- 上传base64编码图片到七牛云
- 图片压缩,Base64编码后上传服务器
- HTML5上传图片base64编码显示缩略图
- iOS post请求图片Base64编码上传
- js图片转base64编码压缩上传
- 如何上传base64编码图片到七牛云
- 本地上传图片 进行base64编码 demo
- 图片和Base64编码转换
- 图片Base64编码和解码
- JavaScript上传图片的方法 判断图片的格式和大小、获取图片的base64编码
- 今天用base64编码上传图片时,图片老是错误
- 【C#】图片的Base64编码和解码
- Base64编码和图片的互相转换
- Base64编码和图片的互相转换
- C++ access函数判断文件是否存在
- hbase快速入门--hTable
- 大小端的区别和判断
- Spherical and Cylindrical Coordinates
- drbd与linux内核
- 第二篇 上传图片和Base64编码
- Spring:DispatcherServlet的详解
- java log4j配置说明
- DRAM,SRAM,SDRAM的关系与区别
- 使用runOnUiThread更新UI
- 架构之美-读书笔记之二
- web.py inet_pton windows部署错误
- 随笔-java进行内存分析
- 供应基于LayerFsd技术文件透明加密SDK