objective-c-Thinkphp+IOS上传图片该怎么处理接收和数据
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了objective-c-Thinkphp+IOS上传图片该怎么处理接收和数据,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含10516字,纯文字阅读大概需要16分钟。
内容图文
刚开始接触APP端程序处理。现在问题就卡在TP端接收IOS传过来的图片,请问TP端处理上传的图片数据该是怎样流程?要注意些什么问题,如数据格式应该是什么?
请问下面的处理方式正确吗?
ios文件如下:
XLSelectView.h文件:
// XLSelectView.h
// XLUploadImages
// Created by 薛林 on 16/6/18.
// Copyright ? 2016年 xuelin. All rights reserved.
#import
@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
XLSelectView.m文件:
// 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 _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
Thinkphp处理文件:
$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' );
请赐教~多谢!
回复内容:
刚开始接触APP端程序处理。
现在问题就卡在TP端接收IOS传过来的图片,请问TP端处理上传的图片数据该是怎样流程?要注意些什么问题,如数据格式应该是什么?
请问下面的处理方式正确吗?
ios文件如下:
XLSelectView.h文件:
// XLSelectView.h
// XLUploadImages
// Created by 薛林 on 16/6/18.
// Copyright ? 2016年 xuelin. All rights reserved.
#import
@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
XLSelectView.m文件:
// 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 _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
Thinkphp处理文件:
$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' );
请赐教~多谢!
内容总结
以上是互联网集市为您收集整理的objective-c-Thinkphp+IOS上传图片该怎么处理接收和数据全部内容,希望文章能够帮你解决objective-c-Thinkphp+IOS上传图片该怎么处理接收和数据所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。