目次
1. 画像を Base64 エンコードに変換し、POST 経由でアップロードします。 PHP は Base64 をバイナリにデコードし、ファイルを書き込みます。欠点: 大きな画像はアップロードできません
2. AFNetworking アップロードでは、PHP 側は通常の受信 Web ページアップロード方法を通じて画像を受け取ります
3. HTTP リクエスト メッセージのリクエスト ボディ (body) に画像をカプセル化します。にアップロードします。これは AFN アップロードの原理でもあります
4. iOS 画像は NSData に変換され、POST を通じてアップロードされます。 PHP は POST パラメータを受け取り、NSData の 16 進エンコーディングを PHP がサポートするバイナリに変換し、ファイルを書き込んで保存します
5. PHP はデータを画像として直接保存します
ホームページ バックエンド開発 PHPチュートリアル iOS は画像をサーバーにアップロードし、サーバー PHP が画像を受信するためのいくつかの方法を提供します。

iOS は画像をサーバーにアップロードし、サーバー PHP が画像を受信するためのいくつかの方法を提供します。

Jun 23, 2016 pm 01:05 PM

1. 画像を Base64 エンコードに変換し、POST 経由でアップロードします。 PHP は Base64 をバイナリにデコードし、ファイルを書き込みます。欠点: 大きな画像はアップロードできません

// iOS(Swift)func upload(image: UIImage, url: String) {    let imageData = UIImageJPEGRepresentation(image, 0.3) // 将图片转换成jpeg格式的NSData,压缩到0.3    let imageStr = imageData?.base64EncodedStringWithOptions(.Encoding64CharacterLineLength) // 将图片转换为base64字符串    let params: NSDictionary = ["file": imageStr!]    let manager = AFHTTPRequestOperationManager()    // 采用POST的方式上传,因为POST对长度没有限制    manager.POST(url, parameters: params, success: { (_: AFHTTPRequestOperation!, response: AnyObject!) in        // 成功    }) { (_: AFHTTPRequestOperation!, _: NSError!) in        // 失败    }}
ログイン後にコピー
<?phpheader('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); // 将图片保存到相应位置?>
ログイン後にコピー

2. AFNetworking アップロードでは、PHP 側は通常の受信 Web ページアップロード方法を通じて画像を受け取ります

static func uploadPortrait(image: UIImage, url: String) {    let manager = AFHTTPRequestOperationManager()    // fromData: AFN封装好的http header类,可以添加请求体    manager.POST(url, parameters: [:], constructingBodyWithBlock: { (fromData: AFMultipartFormData!) in        let pngData = UIImagePNGRepresentation(image)        // name必须和后台PHP接收的参数名相同($_FILES["file"])        // fileName为图片名        fromData.appendPartWithFileData(pngData, name: "file", fileName: "image.png", mimeType: "image/png")              // let jpegData = UIImageJPEGRepresentation(image, 0.3)        // fromData.appendPartWithFileData(jpegData, name: "file", fileName: "image.jpg", mimeType: "image/jpeg")    }, success: { (operation: AFHTTPRequestOperation!, response: AnyObject!) in        // 成功    }) { (operation: AFHTTPRequestOperation!, error: NSError!) in        // 失败    }   }
ログイン後にコピー
<?phpheader('Content-type: text/json; charset=UTF-8' );/** * $_FILES 文件上传变量,是一个二维数组,第一维保存上传的文件的数组,第二维保存文件的属性,包括类型、大小等 * 要实现上传文件,必须修改权限为加入可写 chmod -R 777 目标目录 */// 文件类型限制// "file"名字必须和iOS客户端上传的name一致if (($_FILES["file"]["type"] == "image/gif")|| ($_FILES["file"]["type"] == "image/jpeg")|| ($_FILES["file"]["type"] == "image/png")|| ($_FILES["file"]["type"] == "image/pjpeg"))// && ($_FILES["file"]["size"] < 20000)) // 小于20k{    if ($_FILES["file"]["error"] > 0) {        echo $_FILES["file"]["error"]; // 错误代码    } else {                   $fillname = $_FILES['file']['name']; // 得到文件全名        $dotArray = explode('.', $fillname); // 以.分割字符串,得到数组        $type = end($dotArray); // 得到最后一个元素:文件后缀        $path = "../portrait/".md5(uniqid(rand())).'.'.$type; // 产生随机唯一的名字        move_uploaded_file( // 从临时目录复制到目标目录          $_FILES["file"]["tmp_name"], // 存储在服务器的文件的临时副本的名称          $path);        echo "成功";    } } else {    echo "文件类型不正确";}?>
ログイン後にコピー

3. HTTP リクエスト メッセージのリクエスト ボディ (body) に画像をカプセル化します。にアップロードします。これは AFN アップロードの原理でもあります

// 使用OC封装#import <UIKit/UIKit.h>@interface RequestPostUploadHelper : NSObject+ (NSMutableURLRequest *)uploadImage:(NSString*)url uploadImage:(UIImage *)uploadImage params:(NSMutableDictionary *)params;@end#import "RequestPostUploadHelper.h"@implementation RequestPostUploadHelper+ (NSMutableURLRequest *)uploadImage:(NSString*)url uploadImage:(UIImage *)uploadImage params:(NSMutableDictionary *)params {    [params setObject:uploadImage forKey:@"file"];    //分界线的标识符    NSString *TWITTERFON_FORM_BOUNDARY = @"AaB03x";    //根据url初始化request    NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]                                                           cachePolicy:NSURLRequestReloadIgnoringLocalCacheData                                                       timeoutInterval:10];    //分界线 --AaB03x    NSString *MPboundary=[[NSString alloc]initWithFormat:@"--%@",TWITTERFON_FORM_BOUNDARY];    //结束符 AaB03x--    NSString *endMPboundary=[[NSString alloc]initWithFormat:@"%@--",MPboundary];    //要上传的图片    UIImage *image=[params objectForKey:@"file"];    //得到图片的data    NSData* data = UIImagePNGRepresentation(image);    //http body的字符串    NSMutableString *body=[[NSMutableString alloc]init];    //参数的集合的所有key的集合    NSArray *keys= [params allKeys];    //遍历keys    for(int i = 0; i < [keys count]; i++)    {        //得到当前key        NSString *key = [keys objectAtIndex:i];        //如果key不是file,说明value是字符类型,比如name:Boris        if(![key isEqualToString:@"file"])        {            //添加分界线,换行            [body appendFormat:@"%@\r\n",MPboundary];            //添加字段名称,换2行            [body appendFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n",key];            //添加字段的值            [body appendFormat:@"%@\r\n",[params objectForKey:key]];        }    }    ////添加分界线,换行    [body appendFormat:@"%@\r\n",MPboundary];    //声明file字段,文件名为image.png    [body appendFormat:@"Content-Disposition: form-data; name=\"file\"; filename=\"image.png\"\r\n"];    //声明上传文件的格式    [body appendFormat:@"Content-Type: image/png\r\n\r\n"];    //声明结束符:--AaB03x--    NSString *end=[[NSString alloc] initWithFormat:@"\r\n%@",endMPboundary];    //声明myRequestData,用来放入http body    NSMutableData *myRequestData = [NSMutableData data];    //将body字符串转化为UTF8格式的二进制    [myRequestData appendData:[body dataUsingEncoding:NSUTF8StringEncoding]];    //将image的data加入    [myRequestData appendData:data];    //加入结束符--AaB03x--    [myRequestData appendData:[end dataUsingEncoding:NSUTF8StringEncoding]];    //设置HTTPHeader中Content-Type的值    NSString *content=[[NSString alloc]initWithFormat:@"multipart/form-data; boundary=%@",TWITTERFON_FORM_BOUNDARY];    //设置HTTPHeader    [request setValue:content forHTTPHeaderField:@"Content-Type"];    //设置Content-Length    [request setValue:[NSString stringWithFormat:@"%d", [myRequestData length]] forHTTPHeaderField:@"Content-Length"];    //设置http body    [request setHTTPBody:myRequestData];    //http method    [request setHTTPMethod:@"POST"];    return request;}@end
ログイン後にコピー
// 使用// Swiftstatic func uploadPortrait(image: UIImage, url:String) {    // 使用    let request = RequestPostUploadHelper.uploadImage(url, uploadImage: image, params: [:])    // 异步网络请求    NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue()) { (response: NSURLResponse?, data: NSData?, error: NSError?) in        if error != nil {            // 失败        } else {            // 成功        }    }}
ログイン後にコピー
<?php// PHP代码和上一步相同?>
ログイン後にコピー

4. iOS 画像は NSData に変換され、POST を通じてアップロードされます。 PHP は POST パラメータを受け取り、NSData の 16 進エンコーディングを PHP がサポートするバイナリに変換し、ファイルを書き込んで保存します

PHP が 16 進エンコーディングを受け取った後、それを使用する方法は現時点ではありません。バイナリに変換するアルゴリズムがあり、画像を出力できません。

5. PHP はデータを画像として直接保存します

現在、iOS で NSData を使用する GetBytes をバイナリに変換する方法はありません

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPでの安全なパスワードハッシュ(例:Password_hash、password_verify)を説明します。 MD5またはSHA1を使用してみませんか? PHPでの安全なパスワードハッシュ(例:Password_hash、password_verify)を説明します。 MD5またはSHA1を使用してみませんか? Apr 17, 2025 am 12:06 AM

PHPでは、Password_hashとpassword_verify関数を使用して安全なパスワードハッシュを実装する必要があり、MD5またはSHA1を使用しないでください。 1)password_hashセキュリティを強化するために、塩値を含むハッシュを生成します。 2)password_verifyハッシュ値を比較して、パスワードを確認し、セキュリティを確保します。 3)MD5とSHA1は脆弱であり、塩の値が不足しており、最新のパスワードセキュリティには適していません。

スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか? スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか? Apr 17, 2025 am 12:25 AM

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。

PHPおよびPython:さまざまなパラダイムが説明されています PHPおよびPython:さまざまなパラダイムが説明されています Apr 18, 2025 am 12:26 AM

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPおよびPython:コードの例と比較 PHPおよびPython:コードの例と比較 Apr 15, 2025 am 12:07 AM

PHPとPythonには独自の利点と短所があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1.PHPは、大規模なWebアプリケーションの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンスと機械学習の分野を支配しています。

PHPでのSQL注入をどのように防止しますか? (準備された声明、PDO) PHPでのSQL注入をどのように防止しますか? (準備された声明、PDO) Apr 15, 2025 am 12:15 AM

PHPで前処理ステートメントとPDOを使用すると、SQL注入攻撃を効果的に防ぐことができます。 1)PDOを使用してデータベースに接続し、エラーモードを設定します。 2)準備方法を使用して前処理ステートメントを作成し、プレースホルダーを使用してデータを渡し、メソッドを実行します。 3)結果のクエリを処理し、コードのセキュリティとパフォーマンスを確保します。

PHP:データベースとサーバー側のロジックの処理 PHP:データベースとサーバー側のロジックの処理 Apr 15, 2025 am 12:15 AM

PHPはMySQLIおよびPDO拡張機能を使用して、データベース操作とサーバー側のロジック処理で対話し、セッション管理などの関数を介してサーバー側のロジックを処理します。 1)MySQLIまたはPDOを使用してデータベースに接続し、SQLクエリを実行します。 2)セッション管理およびその他の機能を通じて、HTTPリクエストとユーザーステータスを処理します。 3)トランザクションを使用して、データベース操作の原子性を確保します。 4)SQLインジェクションを防ぎ、例外処理とデバッグの閉鎖接続を使用します。 5)インデックスとキャッシュを通じてパフォーマンスを最適化し、読みやすいコードを書き、エラー処理を実行します。

PHPの目的:動的なWebサイトの構築 PHPの目的:動的なWebサイトの構築 Apr 15, 2025 am 12:18 AM

PHPは動的なWebサイトを構築するために使用され、そのコア関数には次のものが含まれます。1。データベースに接続することにより、動的コンテンツを生成し、リアルタイムでWebページを生成します。 2。ユーザーのインタラクションを処理し、提出をフォームし、入力を確認し、操作に応答します。 3.セッションとユーザー認証を管理して、パーソナライズされたエクスペリエンスを提供します。 4.パフォーマンスを最適化し、ベストプラクティスに従って、ウェブサイトの効率とセキュリティを改善します。

PHPとPythonの選択:ガイド PHPとPythonの選択:ガイド Apr 18, 2025 am 12:24 AM

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

See all articles