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

목표-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 &lt;UIKit/UIKit.h&gt;
@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&lt;AFMultipartFormData&gt;  _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 =&gt; $key) {
    $tmp_str.= '-----'.$key.'=&gt;'.$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("&lt;",'',$byte);
$byte = str_ireplace("&gt;",'',$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 &lt;UIKit/UIKit.h&gt;
@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&lt;AFMultipartFormData&gt;  _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 =&gt; $key) {
    $tmp_str.= '-----'.$key.'=&gt;'.$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("&lt;",'',$byte);
$byte = str_ireplace("&gt;",'',$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으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Dec 24, 2024 pm 04:42 PM

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

CakePHP 날짜 및 시간 CakePHP 날짜 및 시간 Sep 10, 2024 pm 05:27 PM

CakePHP 날짜 및 시간

CakePHP 프로젝트 구성 CakePHP 프로젝트 구성 Sep 10, 2024 pm 05:25 PM

CakePHP 프로젝트 구성

CakePHP 파일 업로드 CakePHP 파일 업로드 Sep 10, 2024 pm 05:27 PM

CakePHP 파일 업로드

CakePHP 라우팅 CakePHP 라우팅 Sep 10, 2024 pm 05:25 PM

CakePHP 라우팅

CakePHP 토론 CakePHP 토론 Sep 10, 2024 pm 05:28 PM

CakePHP 토론

CakePHP 빠른 가이드 CakePHP 빠른 가이드 Sep 10, 2024 pm 05:27 PM

CakePHP 빠른 가이드

PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 Dec 20, 2024 am 11:31 AM

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

See all articles