导入相应的库

import Photos
import AliyunOSSiOS

选取照片需要继承 UIImagePickerControllerDelegate,UINavigationControllerDelegate

class TestViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate{}

在info.plist中添加相关配置如下

<!-- 相册 -->
<key>NSPhotoLibraryUsageDescription</key>
<string>App需要您的同意,才能访问相册</string>
<!-- 相机 -->
<key>NSCameraUsageDescription</key>
<string>App需要您的同意,才能访问相机</string>

从相册选择图片

 func selectPicture() {if UIImagePickerController.isSourceTypeAvailable(.photoLibrary){let picker = UIImagePickerController()picker.delegate = selfpicker.sourceType = UIImagePickerControllerSourceType.photoLibraryself.present(picker, animated: true, completion: {() -> Void in})}else{print("error")}}

拍照图片选取

func camera() {if UIImagePickerController.isSourceTypeAvailable(.camera){let picker = UIImagePickerController()picker.delegate = selfpicker.sourceType = UIImagePickerControllerSourceType.cameraself.present(picker, animated: true, completion: { () -> Void in})}else{print("error")}}

拍照与相册选取会进入同一个回调中,如下所示

func imagePickerController(_ picker:UIImagePickerController, didFinishPickingMediaWithInfo info: [String :Any]){let pickedImage = info[UIImagePickerControllerOriginalImage] as! UIImage,type:String = (info[UIImagePickerControllerMediaType]as!String)let fileManager = FileManager.defaultlet rootPath = NSSearchPathForDirectoriesInDomains(.documentDirectory,.userDomainMask, true)[0] as Stringlet date = NSDate(),timeInterval = date.timeIntervalSince1970 * 1000//将图片保存在本地let filePath = "\(rootPath)/" + String(timeInterval) + ".png"let imageData = UIImageJPEGRepresentation(pickedImage, 1.0)fileManager.createFile(atPath: filePath, contents: imageData, attributes: nil)//上传uploadPic(url: URL.init(fileURLWithPath: filePath))if type == "public.image" {//关闭选择框picker.dismiss(animated:true, completion:nil)}}

  

初始化上传配置相关信息(通过StsToken回调管理token信息) 我是通过Alamofire获取数据

//初始化上传设置func initClient() {//上传配置设置let conf = OSSClientConfiguration()conf.maxRetryCount = 2conf.timeoutIntervalForRequest = 300conf.timeoutIntervalForResource = TimeInterval(24 * 60 * 60)conf.maxConcurrentRequestCount = 50//实现获取StsToken回调let credential2:OSSCredentialProvider = OSSFederationCredentialProvider.init(federationTokenGetter: { () -> OSSFederationToken? inlet tcs = OSSTaskCompletionSource<AnyObject>.init()Alamofire.request("获取相关配置的接口地址", method: .get, parameters: [: ]).responseJSON { (response) inif let value = response.result.value {let json = JSON(value)if json["code"] == 1{tcs.setResult(json as AnyObject?)}else{tcs.setError("error" as! Error)}}}tcs.task.waitUntilFinished()if tcs.task.error != nil {return nil}else {let jsonData:JSON = JSON(tcs.task.result as AnyObject),tokenInfo:OSSFederationToken = OSSFederationToken()tokenInfo.tAccessKey = "通过返回的jsonData自行赋值"tokenInfo.tSecretKey = "通过返回的jsonData自行赋值"tokenInfo.tToken = "通过返回的jsonData自行赋值"tokenInfo.expirationTimeInGMTFormat = "通过返回的jsonData自行赋值"return tokenInfo}})//实例化ossClient = OSSClient(endpoint: EndPoint, credentialProvider: credential2, clientConfiguration: conf)        }

上传方法为(在上传之前先调用initClient):

    //上传图片func uploadPic(url: URL) {let ossPutObj: OSSPutObjectRequest = OSSPutObjectRequest()//key为上传到阿里云的路径let  key = "image/" + md5String(str: String(describing: url)) + ".jpg"ossPutObj.bucketName = BucketNameossPutObj.objectKey = keyossPutObj.uploadingFileURL = urlossPutObj.uploadProgress = { (bytesSent, totalBytesSent, totalBytesExpectedToSend) -> Void inprint(String(bytesSent) + "/" + String(totalBytesSent) + "/" + String(totalBytesExpectedToSend))}let uploadTask = ossClient?.putObject(ossPutObj)uploadTask?.continue({ (uploadTask) -> Any? inif let _err = uploadTask.error {print(_err)} else {if (uploadTask.result as? OSSPutObjectResult) != nil {//上传成功后预览地址自行拼接     }}return uploadTask})}

  

"https://oss-cn-hangzhou.aliyuncs.com"

  

, UINavigationControllerDelegate

转载于:https://www.cnblogs.com/kunH/p/6765156.html

swift3.0 从相册选取或者拍照上传图片至阿里云OSS相关推荐

  1. 微信小程序后台获取签名,裁剪并上传图片至阿里云oss

    微信小程序后台获取签名,裁剪并上传图片至阿里云oss 首先,设置微信开发者工具,选择校验合法域名,防止本地可应使用,线上报错问题: 其次,在微信公众平台–小程序开发,设置合法域名 Oss设置–> ...

  2. 整合百度UEditor上传图片到阿里云OSS

    前言 将图片上传到阿里云OSS是一种趋势,一个必然.当你的项目图片过多,需要频繁上传和替换的时候,用阿里云OSS可以很方便的管理你的图片,节省服务器空间,大大提高了效率.阿里云OSS是阿里云提供的海量 ...

  3. 微信小程序上传图片到阿里云oss方法

    最近开发微信小程序要求上传图片到阿里云oss上,所以就顺手整理一下整个过程啦. 前提 开通oss服务和创建oss存储空间啦(这个就自己去解决吧)下面接入正题: 步骤一:配置 Bucket 跨域 客户端 ...

  4. Android从相册中选取图片上传到阿里云OSS

    在开发APP软件中,boss突然提出想在软件中添加一个多张照片上传的功能,作为菜鸟的我,琢磨了两天,才弄出来,今天特地贴出来.本篇博客主要介绍的是将本地图片上传到服务器的方法技巧.主要技术点是: 一. ...

  5. uni-app 上传图片到阿里云oss

    uni-app 上传本地图片或视频到阿里云oss,带中间圆形进度条 前端控制文件直接将本地图片或视频上传到阿里云oss中,不用走后台接口即可上传 // 在自己的文件中引入配置主文件地址 import ...

  6. php tp5上传图片到阿里云OSS

    1.登录阿里云OSS管理控制台创建Bucket (写入名称,这个我已经创建过了,我接下来会用到,注意Endpoint,后面会用到) 为了方便管理图片,可以在Bucket多建目录进行存放: 2.在tp5 ...

  7. 微信小程序上传图片到阿里云OSS

    微信小程序代码 1.wxml: <image src="{{userInfo.headImg}}" class="user-head_img" bindt ...

  8. (从拿到树莓派到成功实现全程记录)树莓派定时拍照传至阿里云oss

    学长给我的物品清单: 树莓派4b(附加充电线).摄像模块.显示屏(附加HDMI线.充电线).SD卡.读卡器 目录 一.烧录程序 1.下载必须文件 2.烧录镜像 二.无显示屏连接树莓派 1.登录wifi ...

  9. YII2 整合百度UEditor上传图片到阿里云OSS

    yii2 composer 安装完 ueditor 后 目录: \vendor\kucha\ueditor 修改Uploader.php文件 添加: use common\helpers\MyHelp ...

最新文章

  1. 父窗口jquery触发iframe按钮事件(转载)
  2. 存储基础知识 - 磁盘寻址(CHS寻址方式、LBA寻址方式)
  3. HDU-1170的解题报告
  4. AI学习---卷积神经网络
  5. 机器学习(5.sklearn归一化以及标准化)
  6. Redis系列教程(二):详解Redis的存储类型、集群架构、以及应用场景
  7. 如何通过数据分析鉴别假微博大V?
  8. 栈实现 —— 二进制转换为十进制
  9. Windows10 Virtualization Technology虚拟化技术功能
  10. python中qt有哪些控件_使用PyQt5调用Qt程序,基础PythonQt控件的使用方法
  11. 6 云计算系列之Nova安装与配置
  12. 计算机网络(自顶向下方法)学习笔记
  13. VBB、VCC、VDD、VEE、VPP 、VSS 的解释
  14. 玩转手机摄影 oeasy教程总结
  15. 汽车软件测试都测试,汽车零部件如何做测试?
  16. iperf3带宽测试工具
  17. 【汇正财经】沪深创集体红盘,两市近百股涨停
  18. 网易邮箱出现 FA_INVALID_SESSION
  19. 寄存器总结之通用寄存器
  20. Vue 子组件接收到父组件传的值之后再渲染页面

热门文章

  1. 神经网络“炼丹炉”内部构造?牛津大学博士小姐姐用论文解读
  2. CVPR2020 | 跨模态行人重识别:共享与特异特征变换算法cm-SSFT
  3. mysql群集配置_mysql8 参考手册-NDB群集配置参数,选项和变量概述
  4. 数据结构期末复习之B树、B+树
  5. Active Learning: 一个降低深度学习时间,空间,经济成本的解决方案
  6. 近一个月来的学习总结(今天的你比昨天的你进步了吗?)
  7. JS中对数组元素进行增、删、改、查的方法,以及其他方法
  8. 小汤学编程之JavaScript学习day02——运算符、流程控制与循环、函数
  9. 关于HashSet类对象使用迭代器无法进行增删操作的问题
  10. ASP.NET 本地化 (localization)