文档章节

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

大灰狼wow
 大灰狼wow
发布于 2016/02/29 08:52
字数 445
阅读 49
收藏 1
点赞 1
评论 0

//思路如下

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
粉丝 41
博文 326
码字总数 38508
作品 1
嘉兴
程序员
PHP POST接收处理 IOS上传NSData图片数据,上传图片到服务器

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

RablePHP
2014/11/28
0
3
iOS股票K线图、校园助手、适配iPhone X、版本检测等源码

iOS精选源码 快速创建menuItem控件 YHPhotoBrowser 优化的网络图片浏览 cocoaAsynSocket demo (包含客户端和服务端) SwipeMenuViewController现在支持iPhoneX和Swift4。 仿微信的提醒对话框 ...

sunnyaigd
2017/10/31
0
0
LivePhoto开发,你要知道的知识点

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

zhanggui
07/09
0
0
JavaScript(React Native、Node.js等)移动、服务端通吃的全栈语言

作者:李宁老师 东北大学计算机专业硕士。曾任沈阳东软股份项目经理。51CTO学院签约讲师。从事软件研究和开发超过20年。长久以来一直从事Java、Android、iOS、C++、Swift、Objective-C以及跨...

androidguy
06/29
0
0
iOS 线上版本图片资源格式的问题导致的闪退

近段刚刚上传了app新版本 ,上线前也是各种真机调试,包括公司一位同事的iOS9.2系统的iPhone6s , 一点问题都没有 可是两天后审核通过了 我们公司其他人下载app都非常流畅 ,也没有闪退的情况...

奥卡姆剃须刀
2017/05/01
0
0
关于AES256算法java端加密,ios端解密出现无法解密问题的解决方案

我想关于AES算法大家应该都已经了解了,我就不多介绍了。这是本人第一次写技术博文,如果有不对之处欢迎大家指正,共同讨论,一起学习! 之前在项目上用到AES256加密解密算法,刚开始在java端...

Sun1009
2012/12/13
0
32
iOS 终于支持了 PWA,一起来认识一下这个强化版「小程序」 | 科普

iOS 终于支持了 PWA,一起来认识一下这个强化版「小程序」 | 科普 发布于 2018-04-13 文章被以下专栏收录

少数派
07/06
0
0
关于“发送原图”功能问题的记录

本文主要记录一个bug从发现、定位到延期解决的过程。文末添加了已踩过的坑 近期在做“发送原图”功能的时候,遇到一个bug:在Android、Windows、Mac 客户端发送原图,iOS客户端接收,保存原图...

si1ence
2017/12/14
0
0
Java转iOS-第一个项目总结(1)

0.前言 本人14年12月份,从网站开发组转到了移动开发组,自己的java两年半工作经验变成了objective-c零经验。2015年1月份新启动了一个移动项目,年后因为人事变动,自己从辅助开发变成了"核心...

蛙牛
2015/03/31
0
67
Reveal4断点加载-官网拉下来的找起来方便

通过Xcode断点加载Reveal Server 下面描述的方法仅适用于在iOS或tvOS模拟器中运行的应用程序。 通过Xcode调试器断点加载Reveal Server框架是一种很好的方式,可以让您内省您正在处理的任何项...

iOS_windKing
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

mui集成微信H5支付(返回白屏问题已经解决)

一.项目需求 因为公司人员缺少,没有专门开发安卓和ios的人员,为了项目尽早上线采用了混合APP开发的方式,我选择了MUI混合开发框架,项目中需要在用户购买VIP会员的时候进行支付,所以需要在项目...

银装素裹
10分钟前
0
0
Confluence 6 启用远程 API

XML-RPC 和 SOAP 远程 API 从 Confluence 5.5 开始已经废弃了。我们推荐你使用完全支持的 Confluence Server REST API。 希望启用 XML-RPC 和 SOAP 远程 API,你需要从管理员控制台(Adminis...

honeymose
13分钟前
0
0
非常实用的Chrome插件之总结

Chrome在全世界能够如此受欢迎,除了它的稳定性强,速度快这些优点外,还有就是它的插件是非常丰富强大的!最重要的是作为一个程序员,如果不使用Chrome的话你还谈什么是程序员! 有人说不装...

Gibbons
22分钟前
0
0
TensorFlow gpu 版 安装

win10 + Python3.6 下载cuda https://developer.nvidia.com/cuda-downloads?target_os=Windows&target_arch=x86_64&target_version=81&target_type=exelocal 下载cudnn,复制链接地址,使用迅......

阿豪boy
28分钟前
0
0
SpringBoot集成Redis--配置自定义的RedisCacheManager

配置自定义的RedisCacheManager--1自定义键生成规则 默认的键生成器 当不指定缓存的key时,SpringBoot会使用SimpleKeyGenerator生成key。 SimpleKeyGenerator SimpleKey 查看源码可以发现,它...

karma123
29分钟前
0
0
防火墙未来的发展趋势在哪里?

导读 防火墙(Firewall),也称防护墙,是由Check Point创立者Gil Shwed于1993年发明并引入国际互联网。当下互联网时代,无论是大小企业,大部分都会部署有防火墙的设备,但这些防火墙往往并不...

问题终结者
31分钟前
0
0
MongoDB 副本集 成员节点 RECOVERING 状态处理

这两天遇到好几个MongoDB集群故障,其中一种就是节点长期处于 RECOVERING 状态,并且不能主动追上 primary 节点,需要手动干预。 首先 rs.status()查看实例状态,发现有的节点处于 RECOVERI...

xxj123gogo
37分钟前
0
0
建造者/构造者模式

在建造者模式中, 有如下4个角色: ● Product产品类 通常是实现了模板方法模式, 也就是有模板方法和基本方法, 这个参考第10章的模板方 法模式。 例子中的BenzModel和BMWModel就属于产品类...

kim_o
39分钟前
0
0
C常用头文件总结

C常用头文件 #include <assert.h>    //设定插入点#include <ctype.h>     //字符处理#include <errno.h>     //定义错误码#include <float.h>     //浮点数处理#in......

zxszxs
48分钟前
0
0
JVM学习笔记一:类加载机制介绍

1、类加载器 先来查看一波代码 package com.black.example.helloworld;public class JvmTest { public static void main(String[] args) { ClassLoader classLoader = J......

刘祖鹏
48分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部