分享

swift 从相册里取图片并Post传到服务器上

 爽行天下丶 2015-06-12

这是用swift写的,原理都一样,直接上代码吧,也算是记录一下折腾过的东西,也提供一个参考吧,用到的时候自已优化一下,这只是个Demo。

这涉及到UIImagePickerController的使用以及网络请求等。

基本的步骤:

1、弹出相册(UIImagePickerController,实现这两个代理 UIImagePickerControllerDelegate,UINavigationControllerDelegate 

2、选取图片

3、确认选中并上传(异步请求)

弹出相册

  func showpic()

    {

        imagePicker.delegate=self

        imagePicker.sourceType=UIImagePickerControllerSourceType.PhotoLibrary

        imagePicker.modalTransitionStyle=UIModalTransitionStyle.CoverVertical

        imagePicker.allowsEditing=true

       self.presentViewController(imagePicker, animated:true, completion: nil)

    }

UIImagePickerControllerDelegate 代理

func imagePickerController(picker:UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject :AnyObject])

    {

        self.dismissViewControllerAnimated(true, completion:nil);

        let gotImage=info[UIImagePickerControllerOriginalImage]as UIImage

     let midImage:UIImage=self.imageWithImageSimple(gotImage,scaledToSize:CGSizeMake(1000.0,1000.0))//这是对图片进行缩放,因为固定了长宽,所以这个方法会变型,有需要的自已去完善吧, 这里只是粗略使用。

       upload(midImage)//上传

    }

//缩放图片

   func imageWithImageSimple(image:UIImage,scaledToSize newSize:CGSize)->UIImage

    {

     UIGraphicsBeginImageContext(newSize);

    image.drawInRect(CGRectMake(0,0,newSize.width,newSize.height))

    let newImage:UIImage=UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

  return newImage;

 

    }


//上传

   func upload(img:UIImage)

    {

        

      lb.frame=CGRectMake(0,0, self.view.bounds.size.width,20)


        lb.textColor=UIColor.whiteColor()

       lb.text="上传中...."

        lb.textAlignment=NSTextAlignment.Center

        lb.backgroundColor=UIColor.blackColor()

       lb.alpha=1


       //添加风火轮

       av.frame=CGRectMake(200,200,20, 20)

        av.backgroundColor=UIColor.whiteColor()

       av.color=UIColor.redColor()

        av.startAnimating()

        

       self.view.addSubview(av)

    

       self.view.addSubview(lb)


        let data=UIImagePNGRepresentation(img)//把图片转成data

        

        let uploadurl:String="http://www./uploadpictest.aspx"//设置服务器接收地址

       let request=NSMutableURLRequest(URL:NSURL(string:uploadurl)!)

        

        request.HTTPMethod="POST"//设置请求方式

        var boundary:String="-------------------21212222222222222222222"

       var contentType:String="multipart/form-data;boundary="+boundary

        request.addValue(contentType, forHTTPHeaderField:"Content-Type")

       var body=NSMutableData()

        body.appendData(NSString(format:"\r\n--\(boundary)\r\n").dataUsingEncoding(NSUTF8StringEncoding)!)

        body.appendData(NSString(format:"Content-Disposition:form-data;name=\"userfile\";filename=\"dd.jpg\"\r\n").dataUsingEncoding(NSUTF8StringEncoding)!)

        body.appendData(NSString(format:"Content-Type:application/octet-stream\r\n\r\n").dataUsingEncoding(NSUTF8StringEncoding)!)

        body.appendData(data)

        body.appendData(NSString(format:"\r\n--\(boundary)").dataUsingEncoding(NSUTF8StringEncoding)!)

        request.HTTPBody=body

        let que=NSOperationQueue()

       NSURLConnection.sendAsynchronousRequest(request, queue: que, completionHandler: {

            (response, data, error) ->Void in

            

           if (error != nil){

               println(error)

            }else{

                //Handle data in NSData type

               var tr:String=NSString(data:data,encoding:NSUTF8StringEncoding)!

               println(tr)

                //在主线程中更新UI风火轮才停止

                dispatch_sync(dispatch_get_main_queue(), {

                   self.av.stopAnimating()

                 //self.lb.hidden=true

       

                })

                

            }

        })       

    }


在服务器端接收。我用的是C#,做个简的实现。
HttpPostedFile postfile=Request.Files[0];
postfile.SaveAs(Server.MapPath("test/0000.jpg");
Response.Write("上传成功!");
Response.End();



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多