IOS 上传图片 ASIFormDataRequest

    最近做项目遇到了上传图片这个功能,一直弄了两天才弄出来,在这里分享给大家。


  首先要上传图片并不是直接就把图片通过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
   
   <?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




IOS 上传图片 ASIFormDataRequest,布布扣,bubuko.com

IOS 上传图片 ASIFormDataRequest

上一篇:C#微信公众号开发 -- (三)用户关注之后自动回复


下一篇:Qt 游戏之路(三) 战车和炮的移动时旋转