在程序开发中,经常会遇到上传图片的问题,那么,下面的一段代码可以帮助你将图片上传至服务器(本篇代码用的服务器是新浪云的SAE,服务器端的代码是用thinkPHP编写,会在后面贴出)。
直接上代码:
先导入AFN的库和头文件
-(void)savepicture
{
NSString *url = imageUrl;
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"application/json"];
[manager POST:url parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
UIImage *image = [UIImage imageNamed:@"head6.png"];
NSData *imageData = UIImageJPEGRepresentation(image,0.1);//压缩图片 压缩至十分之一
[formData appendPartWithFileData:imageData name:@"user_header_image" fileName:@"image.png" mimeType:@"image/png"];
} success:^(AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) {
NSLog(@"%@",responseObject);
} failure:^(AFHTTPRequestOperation * _Nonnull operation, NSError * _Nonnull error) {
NSLog(@"%@",error);
}];
}
thinkPHP写保存图片的代码有几种,下面就介绍一种简单常用的:
// 这个系统自带 框架带的
public function upload() {
// 注意此方法本身就支持多张图片的上传
$upload = new \Think\Upload();
$upload ->maxSize = 0; // 不限制图片的大小
// 错误的原因是没有将附加的格式写入,添加png到数组中即可,让服务器支持
$upload ->exts = array('jpg','gif','jpeg','png', 'zip');
$upload ->rootPath = '.ciellstorage/img/';
$upload ->savePath = 'header/'; //保存在“header”目录下,header目录是已经存在的
$upload->saveName = array('uniqid',''); // 服务器自动生成一个唯一的文件名 算法 SHA-1类似算法唯一文件名
// 取消自动使用子目录保存上传文件
$upload ->autoSub = false;
//$upload->subName = array('date','Ymd');
$info = $upload -> upload();
if(!$info){
$reutnResult['code']= '0';
$reutnResult['message'] =$upload->getError();
}else {
$reutnResult['code']= '1';
$reutnResult['message'] = $info['user_header_image']['url'];
// 取出info里面的保存的图片名称进行进一步操作
// 保存文件名称到数据库中
}
$this ->ajaxReturn($reutnResult);
}
如果有想知道新浪云的使用可以留言。