> 백엔드 개발 > PHP 튜토리얼 > 목표-c - Thinkphp IOS에서 이미지 수신 및 데이터 업로드를 처리하는 방법

목표-c - Thinkphp IOS에서 이미지 수신 및 데이터 업로드를 처리하는 방법

WBOY
풀어 주다: 2016-08-04 09:21:09
원래의
1394명이 탐색했습니다.

이제 막 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>
로그인 후 복사
로그인 후 복사

깨우쳐주세요~감사합니다!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿