这是用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();
|
|