这是用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]asUIImage
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.wanwudayin.com/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) ->Voidin
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
})
}
})
}
联系客服