文档章节

ios afnetworking2.x上传图片 服务端php无法接受文件问题

大灰狼wow
 大灰狼wow
发布于 2016/02/29 08:52
字数 445
阅读 50
收藏 1

//思路如下

1、将image转成NSData

2、通过传递参数的形式 而不是formData的方式进行传输,formData(有时可以接受到,有时候不行,不稳定)

3、php获取二进制数据 进行存储。

//代码如下

ios端

-(void)uploadImage:(UIImage *)image{

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    NSData * imageData=UIImageJPEGRepresentation(image, 0.1);//转换成二进制的数据流

    NSDictionary *parameters = @{@"file": imageData};//这一步是重点
    [manager POST:@"http://www.d-shang.com/index.php?blog/upload" parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {

    } success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"Success: %@", responseObject);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Error: %@", error);
    }];

}


php端

public function upload(){

    $data=$_POST['file'];
    $filename=time().".jpg";
    $file=ROOT."/log/".$filename;
    $handle=fopen($file,"w+");
    fwrite($handle,$data);
    fclose($handle);   
}


php端判断二进制流文件格式(不是必须的)

/**
 * 通过二进制流获取文件类型
 * @param string $binary_data
 * @return string
 */
function get_file_type_binary_data($binary_data){
	$str_info	= @unpack("c2chars", substr($binary_data, 0, 2));
	$type_code	= $str_info['chars1'].$str_info['chars2'];
	switch ($type_code) {
		case '7790':
			$file_type = 'exe';
			break;
		case '7784':
			$file_type = 'midi';
			break;
		case '8075':
			$file_type = 'zip';
			break;
		case '8297':
			$file_type = 'rar';
			break;
		case '255216':
		case '-1-40':
			$file_type = 'jpg';
			break;
		case '7173':
			$file_type = 'gif';
			break;
		case '6677':
			$file_type = 'bmp';
			break;
		case '13780':
		case '-11980':
			$file_type = 'png';
			break;
		default:
			$file_type = 'unknown';
			break;
	}
	return $file_type;
}


//你可能还需要等比例压缩图片  在上传前处理 不然数据流量太大了

-(UIImage *) imageCompressForWidth:(UIImage *)sourceImage targetWidth:(CGFloat)defineWidth{
    UIImage *newImage = nil;
    CGSize imageSize = sourceImage.size;
    CGFloat width = imageSize.width;
    CGFloat height = imageSize.height;
    CGFloat targetWidth = defineWidth;
    CGFloat targetHeight = height / (width / targetWidth);
    CGSize size = CGSizeMake(targetWidth, targetHeight);
    CGFloat scaleFactor = 0.0;
    CGFloat scaledWidth = targetWidth;
    CGFloat scaledHeight = targetHeight;
    CGPoint thumbnailPoint = CGPointMake(0.0, 0.0);
    if(CGSizeEqualToSize(imageSize, size) == NO){
        CGFloat widthFactor = targetWidth / width;
        CGFloat heightFactor = targetHeight / height;
        if(widthFactor > heightFactor){
            scaleFactor = widthFactor;
        }
        else{
            scaleFactor = heightFactor;
        }
        scaledWidth = width * scaleFactor;
        scaledHeight = height * scaleFactor;
        if(widthFactor > heightFactor){
            thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5;
        }else if(widthFactor < heightFactor){
            thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5;
        }
    }
    UIGraphicsBeginImageContext(size);
    CGRect thumbnailRect = CGRectZero;
    thumbnailRect.origin = thumbnailPoint;
    thumbnailRect.size.width = scaledWidth;
    thumbnailRect.size.height = scaledHeight;
    
    [sourceImage drawInRect:thumbnailRect];
    
    newImage = UIGraphicsGetImageFromCurrentImageContext();
    if(newImage == nil){
        NSLog(@"scale image fail");
    }
    
    UIGraphicsEndImageContext();
    return newImage;
}

参考资料:

[上传用法]http://www.blogjava.net/qileilove/archive/2014/12/11/421323.html

[等比例缩小处理]http://www.cnblogs.com/yswdarren/p/3611934.html


© 著作权归作者所有

共有 人打赏支持
大灰狼wow
粉丝 45
博文 379
码字总数 46884
作品 1
嘉兴
程序员
私信 提问
PHP POST接收处理 IOS上传NSData图片数据,上传图片到服务器

【IOS 接收PHP 图片】 1,PHP将图片的URL直接返回给IOS端即可,IOS获取到URL处理,下载缓存就可以在APP端使用了。 【IOS上传图片PHP接收】 1、IOS上传图片可能有很多方法,今天作者我用了这种...

RablePHP
2014/11/28
0
3
ReactNative IOS模块

[背景] 目前已经开发好相同功能的android版本,本人不会ios开发,无从下手 [需求] 1、语音录制模块 功能需求:语音(开始、停止、试听)、压缩后上传到指定服务器 接收标准: a、IOS端原生模...

孟凯
2016/05/22
1
0
ios向服务器上传照片失败的问题,求指点

android和ios客户端调用同一个服务器(java)接口上传照片,android成功,ios失败,原因在于android 上传时服务器端Servlet的this.getRequest获得的request对象是multiPartRequestWrapper,i...

wjdroid
2017/11/30
208
2
LivePhoto开发,你要知道的知识点

前言 Apple从iPhone6s开始支持Live Photo。Live Photo 会录下拍照前后 1.5 秒所发生的一切,因此用户获得的不仅仅是一张精美照片,还有拍照前后时刻的动作和声音。具体的操作可以参见拍照和编...

zhanggui
07/09
0
0
WeX5 快速开发平台 V3.5 正式版 (2016-7-8)

V3.5能力更新: 1- CloudX5(cloudx5.com)终于和大家见面了,开发应用后可进行一键云部署,完全免费! 2- 基于CloudX5的云IDE推出体验版,可以在线开发APP! 3- 提高质量品质,修复缺陷; ...

muyu
2016/07/11
4.6K
11

没有更多内容

加载失败,请刷新页面

加载更多

js垃圾回收机制和引起内存泄漏的操作

JS的垃圾回收机制了解吗? Js具有自动垃圾回收机制。垃圾收集器会按照固定的时间间隔周期性的执行。 JS中最常见的垃圾回收方式是标记清除。 工作原理:是当变量进入环境时,将这个变量标记为“...

Jack088
昨天
2
0
大数据教程(10.1)倒排索引建立

前面博主介绍了sql中join功能的大数据实现,本节将继续为小伙伴们分享倒排索引的建立。 一、需求 在很多项目中,我们需要对我们的文档建立索引(如:论坛帖子);我们需要记录某个词在各个文...

em_aaron
昨天
3
0
"errcode": 41001, "errmsg": "access_token missing hint: [w.ILza05728877!]"

Postman获取微信小程序码的时候报错, errcode: 41001, errmsg: access_token missing hint 查看小程序开发api指南,原来access_token是直接当作parameter的(写在url之后),scene参数一定要...

两广总督bogang
昨天
7
0
MYSQL索引

索引的作用 索引类似书籍目录,查找数据,先查找目录,定位页码 性能影响 索引能大大减少查询数据时需要扫描的数据量,提高查询速度, 避免排序和使用临时表 将随机I/O变顺序I/O 降低写速度,占用磁...

关元
昨天
7
0
撬动世界的支点——《引爆点》读书笔记2900字优秀范文

撬动世界的支点——《引爆点》读书笔记2900字优秀范文: 作者:挽弓如月。因为加入火种协会的读书活动,最近我连续阅读了两本论述流行的大作,格拉德威尔的《引爆点》和乔纳伯杰的《疯传》。...

原创小博客
昨天
21
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部