목차
목표-c - Thinkphp IOS에서 이미지 수신 및 데이터 업로드를 처리하는 방법
Aug 04, 2016 am 09:21 AM
ios
objective-c
php
thinkphp
이제 막 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/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 파일:
<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 처리 파일:
<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>
로그인 후 복사
로그인 후 복사
계몽해주세요~감사합니다!
답글 내용:
이제 막 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/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 파일:
<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 처리 파일:
<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>
로그인 후 복사
로그인 후 복사
깨우쳐주세요~감사합니다!
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

인기 기사
Repo : 팀원을 부활시키는 방법
3 몇 주 전
By 尊渡假赌尊渡假赌尊渡假赌
스플릿 소설을이기는 데 얼마나 걸립니까?
3 몇 주 전
By DDD
헬로 키티 아일랜드 어드벤처 : 거대한 씨앗을 얻는 방법
3 몇 주 전
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 주 전
By 尊渡假赌尊渡假赌尊渡假赌

인기 기사
Repo : 팀원을 부활시키는 방법
3 몇 주 전
By 尊渡假赌尊渡假赌尊渡假赌
스플릿 소설을이기는 데 얼마나 걸립니까?
3 몇 주 전
By DDD
헬로 키티 아일랜드 어드벤처 : 거대한 씨앗을 얻는 방법
3 몇 주 전
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 주 전
By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 기사 태그

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제
Gmail 이메일의 로그인 입구는 어디에 있나요?
7287
9


자바 튜토리얼
1622
14


Cakephp 튜토리얼
1342
46


라라벨 튜토리얼
1259
25


PHP 튜토리얼
1206
29



Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드

PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법
