


objective-c - How to handle receiving and data when uploading images to Thinkphp+IOS
Just started to get in touch with APP-side program processing.
The problem now is that the TP side receives the pictures from IOS. What is the process for the TP side to process the uploaded picture data? What issues should be paid attention to, such as what should the data format be?
Is the following processing method correct?
ios file is as follows:
XLSelectView.h file:
<code>// XLSelectView.h // XLUploadImages // Created by 薛林 on 16/6/18. // Copyright © 2016年 xuelin. All rights reserved. #import <UIKit/UIKit.h> @class ZLPhotoPickerViewController; @interface XLSelectView : UIView //跳转界面的block @property (nonatomic, copy) void(^presentVC)(ZLPhotoPickerViewController *pickerVC); //网络需要传入的参数 @property (nonatomic, copy) NSString *postUrlString; //parameters @property (nonatomic, strong) NSDictionary *parameters; //后台接收图片的字段 @property (nonatomic, copy) NSString *userfile; //加载xib + (instancetype)loadnib; @end </code>
XLSelectView.m file:
<code>// XLSelectView.m // XLUploadImages // // Created by 薛林 on 16/6/18. // Copyright © 2016年 xuelin. All rights reserved. // #import "XLSelectView.h" #import "ZLPhoto.h" #import "AFNetworking.h" #import "DGGlobel.h" #import "DGSecret.h" @interface XLSelectView () //保存图片二进制数据 @property (nonatomic, strong) NSMutableDictionary *fileDict; @end @implementation XLSelectView #pragma mark - 懒加载字典 - (NSMutableDictionary *)fileDict { if (_fileDict == nil) { _fileDict = [NSMutableDictionary dictionary]; } return _fileDict; } #pragma mark - 加载xib + (instancetype)loadnib { return [[[NSBundle mainBundle]loadNibNamed:@"XLSelectView" owner:nil options:nil]lastObject]; } - (IBAction)selectMorePic:(id)sender { // 创建图片多选控制器 ZLPhotoPickerViewController *pickerVc = [[ZLPhotoPickerViewController alloc] init]; // 默认显示相册里面的内容SavePhotos pickerVc.status = PickerViewShowStatusSavePhotos; // 选择图片的最小数,默认是9张图片最大也是9张 pickerVc.maxCount = 9; self.presentVC(pickerVc); // 用block来回调 __weak typeof(self) weakSelf = self; pickerVc.callBack = ^(NSArray *assets){ //遍历获取每一张图片 并转成二进制 for (ZLPhotoAssets *asset in assets) { NSData *imageData = UIImagePNGRepresentation(asset.originImage); //给图片起随机名字 NSString *filename = [NSString stringWithFormat:@"%d.png",arc4random_uniform(100)]; //保存到fileDict中 [weakSelf.fileDict setObject:imageData forKey:filename]; } }; } - (IBAction)oploadPicture:(id)sender { [self original]; } - (void)original { //创建管理者 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; manager.responseSerializer = [AFHTTPResponseSerializer serializer]; NSString *url = @"http://www.baidu.cn/index.php/Home/Index/ugc_tipic"; [manager.requestSerializer setValue:@"application/json, image/png" forHTTPHeaderField:@"Accept"]; // [manager.requestSerializer setValue:url.absoluteString forHTTPHeaderField:@"Referer"]; // 加密 NSString *mdSecret = [DGSecret md5:[DGGlobel getInstance].secret]; NSMutableDictionary *dic = [NSMutableDictionary dictionary]; [dic setValue:[DGGlobel getInstance].user_id forKey:@"user_id"]; [manager POST:url parameters:dic constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) { [self.fileDict enumerateKeysAndObjectsUsingBlock:^(NSString *saveFliename, NSData *fileData, BOOL * _Nonnull stop) { //获取到每个文件的二进制数据 拼接文本参数 [formData appendPartWithFileData:fileData name:@"file" fileName:saveFliename mimeType:@"image/jpg"]; }]; } progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { NSDictionary *content = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil]; NSLog(@"上传成功content = %@",content); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { NSLog(@"上传失败%@",[error localizedDescription]); }]; } @end </code>
Thinkphp processing files:
<code>$ugc_topic = M('ugc_topic'); $ugc_image_type = M('ugc_image_type'); $tmp_str = ''; $upload = $_POST; foreach($upload as $value => $key) { $tmp_str.= '-----'.$key.'=>'.$value."\n\r"; } // ----------------调试程序---------------------- $filename = dirname(__FILE__).'/file.txt'; $now_time = date('Y-m-d H:i:s' , time()); $word2 = "{$now_time}\n\r{$tmp_str}\n\r\n\r"; $fh = fopen($filename, "a+"); echo fwrite($fh, $word2); fclose($fh); $user_id = I('post.user_id','','htmlspecialchars'); // 当前登陆成功的用户id $title = I('post.title','','htmlspecialchars'); // 当前发布话题的标题 $content = I('post.content','','htmlspecialchars'); // 当前发布话题的内容 $remind_who = I('post.remind_who','','htmlspecialchars'); // 提醒谁看的用户id $image_name = I('post.image_name','','htmlspecialchars'); // 当前发布话题的图片 header("Content-Type: application/octet-stream"); $byte = $_POST['image_name']; $byte = str_replace(' ','',$byte); //处理数据 $byte = str_ireplace("<",'',$byte); $byte = str_ireplace(">",'',$byte); $byte = pack("H*",$byte); //16进制转换成二进制 $filename2 = dirname(__FILE__).'/file.txt'; $word22 = "\n\r\n\r{$byte}\n\r\n\r"; $fhf = fopen($filename2, "a+"); echo fwrite($fhf, $word22); fclose($fhf); header('Content-type: text/json; charset=UTF-8'); $base64 = $_POST["file"]; // 得到参数 $img = base64_decode($base64); // 将格式为base64的字符串解码 $path = "md5(uniqid(rand()))".".jpg"; // 产生随机唯一的名字作为文件名 file_put_contents($path, $img); // 将图片保存到相应位置 header('Content-type: text/json; charset=UTF-8' );</code>
Please enlighten me~Thank you!
Reply content:
I just started to get in touch with APP-side program processing.
The problem now is that the TP side receives the pictures from IOS. What is the process for the TP side to process the uploaded picture data? What issues should be paid attention to, such as what should the data format be?
Is the following processing method correct?
ios file is as follows:
XLSelectView.h file:
<code>// XLSelectView.h // XLUploadImages // Created by 薛林 on 16/6/18. // Copyright © 2016年 xuelin. All rights reserved. #import <UIKit/UIKit.h> @class ZLPhotoPickerViewController; @interface XLSelectView : UIView //跳转界面的block @property (nonatomic, copy) void(^presentVC)(ZLPhotoPickerViewController *pickerVC); //网络需要传入的参数 @property (nonatomic, copy) NSString *postUrlString; //parameters @property (nonatomic, strong) NSDictionary *parameters; //后台接收图片的字段 @property (nonatomic, copy) NSString *userfile; //加载xib + (instancetype)loadnib; @end </code>
XLSelectView.m file:
<code>// XLSelectView.m // XLUploadImages // // Created by 薛林 on 16/6/18. // Copyright © 2016年 xuelin. All rights reserved. // #import "XLSelectView.h" #import "ZLPhoto.h" #import "AFNetworking.h" #import "DGGlobel.h" #import "DGSecret.h" @interface XLSelectView () //保存图片二进制数据 @property (nonatomic, strong) NSMutableDictionary *fileDict; @end @implementation XLSelectView #pragma mark - 懒加载字典 - (NSMutableDictionary *)fileDict { if (_fileDict == nil) { _fileDict = [NSMutableDictionary dictionary]; } return _fileDict; } #pragma mark - 加载xib + (instancetype)loadnib { return [[[NSBundle mainBundle]loadNibNamed:@"XLSelectView" owner:nil options:nil]lastObject]; } - (IBAction)selectMorePic:(id)sender { // 创建图片多选控制器 ZLPhotoPickerViewController *pickerVc = [[ZLPhotoPickerViewController alloc] init]; // 默认显示相册里面的内容SavePhotos pickerVc.status = PickerViewShowStatusSavePhotos; // 选择图片的最小数,默认是9张图片最大也是9张 pickerVc.maxCount = 9; self.presentVC(pickerVc); // 用block来回调 __weak typeof(self) weakSelf = self; pickerVc.callBack = ^(NSArray *assets){ //遍历获取每一张图片 并转成二进制 for (ZLPhotoAssets *asset in assets) { NSData *imageData = UIImagePNGRepresentation(asset.originImage); //给图片起随机名字 NSString *filename = [NSString stringWithFormat:@"%d.png",arc4random_uniform(100)]; //保存到fileDict中 [weakSelf.fileDict setObject:imageData forKey:filename]; } }; } - (IBAction)oploadPicture:(id)sender { [self original]; } - (void)original { //创建管理者 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; manager.responseSerializer = [AFHTTPResponseSerializer serializer]; NSString *url = @"http://www.baidu.cn/index.php/Home/Index/ugc_tipic"; [manager.requestSerializer setValue:@"application/json, image/png" forHTTPHeaderField:@"Accept"]; // [manager.requestSerializer setValue:url.absoluteString forHTTPHeaderField:@"Referer"]; // 加密 NSString *mdSecret = [DGSecret md5:[DGGlobel getInstance].secret]; NSMutableDictionary *dic = [NSMutableDictionary dictionary]; [dic setValue:[DGGlobel getInstance].user_id forKey:@"user_id"]; [manager POST:url parameters:dic constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) { [self.fileDict enumerateKeysAndObjectsUsingBlock:^(NSString *saveFliename, NSData *fileData, BOOL * _Nonnull stop) { //获取到每个文件的二进制数据 拼接文本参数 [formData appendPartWithFileData:fileData name:@"file" fileName:saveFliename mimeType:@"image/jpg"]; }]; } progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { NSDictionary *content = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil]; NSLog(@"上传成功content = %@",content); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { NSLog(@"上传失败%@",[error localizedDescription]); }]; } @end </code>
Thinkphp processing files:
<code>$ugc_topic = M('ugc_topic'); $ugc_image_type = M('ugc_image_type'); $tmp_str = ''; $upload = $_POST; foreach($upload as $value => $key) { $tmp_str.= '-----'.$key.'=>'.$value."\n\r"; } // ----------------调试程序---------------------- $filename = dirname(__FILE__).'/file.txt'; $now_time = date('Y-m-d H:i:s' , time()); $word2 = "{$now_time}\n\r{$tmp_str}\n\r\n\r"; $fh = fopen($filename, "a+"); echo fwrite($fh, $word2); fclose($fh); $user_id = I('post.user_id','','htmlspecialchars'); // 当前登陆成功的用户id $title = I('post.title','','htmlspecialchars'); // 当前发布话题的标题 $content = I('post.content','','htmlspecialchars'); // 当前发布话题的内容 $remind_who = I('post.remind_who','','htmlspecialchars'); // 提醒谁看的用户id $image_name = I('post.image_name','','htmlspecialchars'); // 当前发布话题的图片 header("Content-Type: application/octet-stream"); $byte = $_POST['image_name']; $byte = str_replace(' ','',$byte); //处理数据 $byte = str_ireplace("<",'',$byte); $byte = str_ireplace(">",'',$byte); $byte = pack("H*",$byte); //16进制转换成二进制 $filename2 = dirname(__FILE__).'/file.txt'; $word22 = "\n\r\n\r{$byte}\n\r\n\r"; $fhf = fopen($filename2, "a+"); echo fwrite($fhf, $word22); fclose($fhf); header('Content-type: text/json; charset=UTF-8'); $base64 = $_POST["file"]; // 得到参数 $img = base64_decode($base64); // 将格式为base64的字符串解码 $path = "md5(uniqid(rand()))".".jpg"; // 产生随机唯一的名字作为文件名 file_put_contents($path, $img); // 将图片保存到相应位置 header('Content-type: text/json; charset=UTF-8' );</code>
Please enlighten me~Thank you!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

To work with date and time in cakephp4, we are going to make use of the available FrozenTime class.

To work on file upload we are going to use the form helper. Here, is an example for file upload.

CakePHP is an open-source framework for PHP. It is intended to make developing, deploying and maintaining applications much easier. CakePHP is based on a MVC-like architecture that is both powerful and easy to grasp. Models, Views, and Controllers gu

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

Validator can be created by adding the following two lines in the controller.

CakePHP is an open source MVC framework. It makes developing, deploying and maintaining applications much easier. CakePHP has a number of libraries to reduce the overload of most common tasks.

This tutorial demonstrates how to efficiently process XML documents using PHP. XML (eXtensible Markup Language) is a versatile text-based markup language designed for both human readability and machine parsing. It's commonly used for data storage an
