你好,歡迎來到IOS教程網

 Ios教程網 >> IOS訊息 >> 關於IOS >> IOS 上傳圖片 ASIFormDataRequest

IOS 上傳圖片 ASIFormDataRequest

編輯:關於IOS

最近做項目遇到了上傳圖片這個功能,一直弄了兩天才弄出來,在這裡分享給大家。

首先要上傳圖片並不是直接就把圖片通過URL上傳的,而是要把圖片轉化為二進制文件。
IOS中有兩個方法,能直接把圖片轉化為二進制
UIImage *image = [UIImage imageNamed:@"8fca9.jpg"];

NSData *data = UIImagePNGRepresentation(image);
NSData *data2 = UIImageJPEGRepresentation(image, 1);
就是運用這兩個方法中的一個把圖片轉化為二進制數據data
然後就是吧data上傳到網絡上。在這裡我用了一個網絡請求的第三方庫 ASIFormDataRequest
具體代碼如下
// 用URL初始化請求
ASIFormDataRequest *request=[[ASIFormDataRequest alloc] initWithURL:url];
// 設置代理
[request setDelegate:self];
// 為上傳對象添加數據 數據
[request addData:data withFileName:@"testimage.png" andContentType:@"image/png" forKey:@"file"];
// 上傳後保存的名字 // 保存類型 // 表單名 和 相應的php 文件相對
[request startAsynchronous];//開始。異步
這就完成了,是不是很簡單。其實這只是做了一半工作。

下面是關於服務器是怎麼處理這個請求的。
我是寫了一個PHP文件,來處理這個網絡請求,下面給出PHP

header("Content-type:text/html;charset=utf-8");
/*bool print_r ( mixed expression [, bool return] ) 詳解

注: 參數 return 是在 PHP 4.3.0 的時候加上的
print_r() 顯示關於一個變量的易於理解的信息。如果給出的是 string、integer 或 float,將打印變量值本身。如果給出的是 array,將會按照一定格式顯示鍵和元素。object 與數組類似。
記住,print_r() 將把數組的指針移到最後邊。
*/

/*$_files 詳解
主要用在當需要上傳二進制文件的地方,錄入上傳一個abc.mp3文件,則服務器端需要獲得該文件的相關信息,則通過變量$_files來取得。
$_FILES['userfile']['name']
客戶端機器文件的原名稱。

$_FILES['userfile']['type']
文件的 MIME 類型,需要浏覽器提供該信息的支持,例如“image/gif”。

$_FILES['userfile']['size']
已上傳文件的大小,單位為字節。

$_FILES['userfile']['tmp_name']
文件被上傳後在服務端儲存的臨時文件名。

$_FILES['userfile']['error']
和該文件上傳相關的錯誤代碼。['error'] 是在 PHP 4.2.0 版本中增加的。

注: 在 PHP 4.1.0 版本以前該數組的名稱為 $HTTP_POST_FILES,它並不像 $_FILES 一樣是自動全局變量。PHP 3 不支持 $HTTP_POST_FILES 數組。
如果表單中沒有選擇上傳的文件,則 PHP 變量 $_FILES['userfile']['size'] 的值將為 0,$_FILES['userfile']['tmp_name'] 將為 none。
*/

print_r($_FILES['file']);

$filename = $_FILES['file']['name'];

if(!$_FILES['file']['error'])

{
/*move_uploaded_file 詳解
http://www.w3school.com.cn/php/func_filesystem_move_uploaded_file.asp
*/
//將文件寫到指定的路徑
if(move_uploaded_file($_FILES['file']['tmp_name'],"./image/user/".$filename)){

echo "上傳文件成功";
}

}else{
echo "文件上傳錯誤";
}
?>

以上就是完整的網絡請求和PHP文件了。
這裡要特別注意的一點是,一定要獲得文件夾的讀寫權限,而且不僅僅是一個文件夾權限,

是整個路徑上所有文件夾的權限。

好今天就跟大家分享這麼一個小知識 ―― LC

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved