刚开始接触APP端程序处理。
现在问题就卡在TP端接收IOS传过来的图片,请问TP端处理上传的图片数据该是怎样流程?要注意些什么问题,如数据格式应该是什么?
请问下面的处理方式正确吗?
ios文件如下:
XLSelectView.h文件:
<code>// XLSelectView.h // XLUploadImages // Created by 薛林 on 16/6/18. // Copyright © 2016年 xuelin. All rights reserved. #import <uikit> @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 </uikit></code>
XLSelectView.m文件:
<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 </afmultipartformdata></code>
Thinkphp处理文件:
<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 = 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>
请赐教~多谢!
回复内容:
刚开始接触APP端程序处理。
现在问题就卡在TP端接收IOS传过来的图片,请问TP端处理上传的图片数据该是怎样流程?要注意些什么问题,如数据格式应该是什么?
请问下面的处理方式正确吗?
ios文件如下:
XLSelectView.h文件:
<code>// XLSelectView.h // XLUploadImages // Created by 薛林 on 16/6/18. // Copyright © 2016年 xuelin. All rights reserved. #import <uikit> @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 </uikit></code>
XLSelectView.m文件:
<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 </afmultipartformdata></code>
Thinkphp处理文件:
<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 = 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>
请赐教~多谢!

tomakephpapplicationsfaster,关注台词:1)useopcodeCachingLikeLikeLikeLikeLikePachetoStorePreciledScompiledScriptbyTecode.2)MinimimiedAtabaseSqueriSegrieSqueriSegeriSybysequeryCachingandeffeftExting.3)Leveragephp7 leveragephp7 leveragephp7 leveragephpphp7功能forbettercodeefficy.4)

到ImprovephPapplicationspeed,关注台词:1)启用opcodeCachingwithapCutoredUcescriptexecutiontime.2)实现databasequerycachingusingpdotominiminimizedatabasehits.3)usehttp/2tomultiplexrequlexrequestsandredececonnection.4 limitsclection.4.4

依赖注入(DI)通过显式传递依赖关系,显着提升了PHP代码的可测试性。 1)DI解耦类与具体实现,使测试和维护更灵活。 2)三种类型中,构造函数注入明确表达依赖,保持状态一致。 3)使用DI容器管理复杂依赖,提升代码质量和开发效率。

databasequeryOptimizationinphpinvolVolVOLVESEVERSEVERSTRATEMIESOENHANCEPERANCE.1)SELECTONLYNLYNESSERSAYCOLUMNSTORMONTOUMTOUNSOUDSATATATATATATATATATATRANSFER.3)

phpisusedforsenderemailsduetoitsbuilt-inmail()函数andsupportiveLibrariesLikePhpMailerandSwiftMailer.1)usethemail()functionforbasicemails,butithasimails.2)butithasimimitations.2)

PHP性能瓶颈可以通过以下步骤解决:1)使用Xdebug或Blackfire进行性能分析,找出问题所在;2)优化数据库查询并使用缓存,如APCu;3)使用array_filter等高效函数优化数组操作;4)配置OPcache进行字节码缓存;5)优化前端,如减少HTTP请求和优化图片;6)持续监控和优化性能。通过这些方法,可以显着提升PHP应用的性能。

依赖性注射(DI)InphpisadesignPatternthatManages和ReducesClassDeptions,增强量产生性,可验证性和Maintainability.itallowspasspassingDepentenciesLikEdenceSeconnectionSeconnectionStoclasseconnectionStoclasseSasasasasareTers,interitationApertatingAeseritatingEaseTestingEasingEaseTeStingEasingAndScalability。

cachingimprovesphpermenceByStorcyResultSofComputationsorqucrouctationsorquctationsorquickretrieval,reducingServerLoadAndenHancingResponsetimes.feftectivestrategiesinclude:1)opcodecaching,whereStoresCompiledSinmememorytssinmemorytoskipcompliation; 2)datacaching datacachingsingMemccachingmcachingmcachings


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

WebStorm Mac版
好用的JavaScript开发工具

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Atom编辑器mac版下载
最流行的的开源编辑器