Heim > Backend-Entwicklung > PHP-Tutorial > object-c – Thinkphp IOS, wie man mit dem Empfangen und Hochladen von Daten umgeht

object-c – Thinkphp IOS, wie man mit dem Empfangen und Hochladen von Daten umgeht

WBOY
Freigeben: 2016-08-04 09:21:09
Original
1381 Leute haben es durchsucht

Ich habe gerade angefangen, die APP-seitige Programmverarbeitung zu kontaktieren.
Das Problem besteht nun darin, dass die TP-Seite die Bilder von IOS erhält. Wie verarbeitet die TP-Seite die hochgeladenen Bilddaten? Auf welche Punkte sollte geachtet werden, beispielsweise auf welches Datenformat?
Ist die folgende Verarbeitungsmethode korrekt?

ios-Datei lautet wie folgt:
XLSelectView.h-Datei:

<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>
Nach dem Login kopieren
Nach dem Login kopieren

XLSelectView.m-Datei:

<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>
Nach dem Login kopieren
Nach dem Login kopieren

Thinkphp verarbeitet Dateien:

<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>
Nach dem Login kopieren
Nach dem Login kopieren

Bitte klären Sie mich auf ~ Danke!

Antwortinhalt:

Ich habe gerade angefangen, die APP-seitige Programmverarbeitung zu kontaktieren.
Das Problem besteht nun darin, dass die TP-Seite die Bilder von IOS erhält. Wie verarbeitet die TP-Seite die hochgeladenen Bilddaten? Auf welche Punkte sollte geachtet werden, beispielsweise auf welches Datenformat?
Ist die folgende Verarbeitungsmethode korrekt?

ios-Datei lautet wie folgt:
XLSelectView.h-Datei:

<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>
Nach dem Login kopieren
Nach dem Login kopieren

XLSelectView.m-Datei:

<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>
Nach dem Login kopieren
Nach dem Login kopieren

Thinkphp verarbeitet Dateien:

<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>
Nach dem Login kopieren
Nach dem Login kopieren

Bitte klären Sie mich auf ~ Danke!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage