iOS上传图像到服务器,以及服务器PHP接收的几种方法
1. 将图片转换为Base64编码,POST上传。PHP将Base64解码为二进制,再写出文件。缺点:不能上传较大的图片
func upload(image: UIImage, url: String) {
let imageData = UIImageJPEGRepresentation(image, 0.3)
let imageStr = imageData?.base64EncodedStringWithOptions(.Encoding64CharacterLineLength)
let params: NSDictionary = ["file": imageStr!]
let manager = AFHTTPRequestOperationManager()
manager.POST(url, parameters: params, success: { (_: AFHTTPRequestOperation!, response: AnyObject!) in
}) { (_: AFHTTPRequestOperation!, _: NSError!) in
}
}
<?php
header('Content-type: text/json; charset=UTF-8');
$base64 = $_POST["file"];
$img = base64_decode($base64);
$path = "md5(uniqid(rand()))".".jpg";
file_put_contents($path, $img);
?>
2.将图片封装在Http的请求报文中的请求体(body)中上传。也是AFN上传的原理
http://www.iashes.com/2016-03-1313.html
#import <UIKit/UIKit.h>
@interface RequestPostUploadHelper : NSObject
+ (NSMutableURLRequest *)uploadImage:(NSString*)url uploadImage:(UIImage *)uploadImage params:(NSMutableDictionary *)params;
@end
#import "RequestPostUploadHelper.h"
@implementation RequestPostUploadHelper
+ (NSMutableURLRequest *)uploadImage:(NSString*)url uploadImage:(UIImage *)uploadImage params:(NSMutableDictionary *)params {
[params setObject:uploadImage forKey:@"file"];
NSString *TWITTERFON_FORM_BOUNDARY = @"AaB03x";
NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]
cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
timeoutInterval:10];
NSString *MPboundary=[[NSString alloc]initWithFormat:@"--%@",TWITTERFON_FORM_BOUNDARY];
NSString *endMPboundary=[[NSString alloc]initWithFormat:@"%@--",MPboundary];
UIImage *image=[params objectForKey:@"file"];
NSData* data = UIImagePNGRepresentation(image);
NSMutableString *body=[[NSMutableString alloc]init];
NSArray *keys= [params allKeys];
for(int i = 0; i < [keys count]; i++)
{
NSString *key = [keys objectAtIndex:i];
if(![key isEqualToString:@"file"])
{
[body appendFormat:@"%@\r\n",MPboundary];
[body appendFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n",key];
[body appendFormat:@"%@\r\n",[params objectForKey:key]];
}
}
[body appendFormat:@"%@\r\n",MPboundary];
[body appendFormat:@"Content-Disposition: form-data; name=\"file\"; filename=\"image.png\"\r\n"];
[body appendFormat:@"Content-Type: image/png\r\n\r\n"];
NSString *end=[[NSString alloc] initWithFormat:@"\r\n%@",endMPboundary];
NSMutableData *myRequestData = [NSMutableData data];
[myRequestData appendData:[body dataUsingEncoding:NSUTF8StringEncoding]];
[myRequestData appendData:data];
[myRequestData appendData:[end dataUsingEncoding:NSUTF8StringEncoding]];
NSString *content=[[NSString alloc]initWithFormat:@"multipart/form-data; boundary=%@",TWITTERFON_FORM_BOUNDARY];
[request setValue:content forHTTPHeaderField:@"Content-Type"];
[request setValue:[NSString stringWithFormat:@"%d", [myRequestData length]] forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody:myRequestData];
[request setHTTPMethod:@"POST"];
return request;
}
@end
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
static func uploadPortrait(image: UIImage, url:String) {
let request = RequestPostUploadHelper.uploadImage(url, uploadImage: image, params: [:])
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue()) { (response: NSURLResponse?, data: NSData?, error: NSError?) in
if error != nil {
} else {
}
}
}