1. 将图片转换为Base64编码,POST上传。PHP将Base64解码为二进制,再写出文件。缺点:不能上传较大的图片
1 | <?phpheader( 'Content-type: text/json; charset=UTF-8' ); $base64 = $_POST [ "file" ];
|
Nach dem Login kopieren
2.AFNetworking上传,PHP端通过正常接收网页上传方法来接收图片
1 | static func uploadPortrait(image: UIImage, url: String) { let manager = AFHTTPRequestOperationManager()
|
Nach dem Login kopieren
1 | <?phpheader( 'Content-type: text/json; charset=UTF-8' ); // 文件类型限制// "file" 名字必须和iOS客户端上传的name一致 if (( $_FILES [ "file" ][ "type" ] == "image/gif" )|| ( $_FILES [ "file" ][ "type" ] == "image/jpeg" )|| ( $_FILES [ "file" ][ "type" ] == "image/png" )|| ( $_FILES [ "file" ][ "type" ] == "image/pjpeg" ))// && ( $_FILES [ "file" ][ "size" ] < 20000)) // 小于20k{ if ( $_FILES [ "file" ][ "error" ] > 0) { echo $_FILES [ "file" ][ "error" ]; // 错误代码 } else { $fillname = $_FILES [ 'file' ][ 'name' ]; // 得到文件全名 $dotArray = explode ( '.' , $fillname ); // 以.分割字符串,得到数组 $type = end ( $dotArray ); // 得到最后一个元素:文件后缀 $path = "../portrait/" .md5(uniqid(rand())). '.' . $type ; // 产生随机唯一的名字 move_uploaded_file( // 从临时目录复制到目标目录 $_FILES [ "file" ][ "tmp_name" ], // 存储在服务器的文件的临时副本的名称 $path ); echo "成功" ; } } else { echo "文件类型不正确" ;}?>
|
Nach dem Login kopieren
3.将图片封装在Http的请求报文中的请求体(body)中上传。也是AFN上传的原理
4.iOS图片转换为NSData,通过POST上传。PHP接收POST参数,将NSData的16进制编码转换为PHP支持的二进制,再写出文件保存
暂时没有找到办法,PHP接收到16进制编码后,使用算法转换为二进制后无法输出图片
5.二进制POST上传。PHP直接将数据保存为图片
暂时没有找到办法,iOS端使用NSData的getBytes无法转换为二进制