objective-c - Thinkphp+IOS上传图片该怎么处理接收和数据
程序员文章站
2022-05-17 17:26:54
...
刚开始接触APP端程序处理。
现在问题就卡在TP端接收IOS传过来的图片,请问TP端处理上传的图片数据该是怎样流程?要注意些什么问题,如数据格式应该是什么?
请问下面的处理方式正确吗?
现在问题就卡在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 = 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 = 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' );
请赐教~多谢!