IOS 上傳圖片 ASIFormDataRequest

來源:互聯網
上載者:User

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


首先要上傳圖片並不是直接就把圖片通過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




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.