导入相应的库
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 = self
picker.sourceType = UIImagePickerControllerSourceType.photoLibrary
self.present(picker, animated: true, completion: {
() -> Void in
})
}else{
print("error")
}
}

拍照图片选取

func camera() {

        if UIImagePickerController.isSourceTypeAvailable(.camera){
let picker = UIImagePickerController()
picker.delegate = self
picker.sourceType = UIImagePickerControllerSourceType.camera
self.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.default
let rootPath = NSSearchPathForDirectoriesInDomains(.documentDirectory,
.userDomainMask, true)[0] as String let 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 = 2
conf.timeoutIntervalForRequest = 300
conf.timeoutIntervalForResource = TimeInterval(24 * 60 * 60)
conf.maxConcurrentRequestCount = 50 //实现获取StsToken回调
let credential2:OSSCredentialProvider = OSSFederationCredentialProvider.init(federationTokenGetter: { () -> OSSFederationToken? in let tcs = OSSTaskCompletionSource<AnyObject>.init() Alamofire.request("获取相关配置的接口地址", method: .get, parameters: [: ])
.responseJSON { (response) in if 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 = BucketName
ossPutObj.objectKey = key
ossPutObj.uploadingFileURL = url ossPutObj.uploadProgress = { (bytesSent, totalBytesSent, totalBytesExpectedToSend) -> Void in
print(String(bytesSent) + "/" + String(totalBytesSent) + "/" + String(totalBytesExpectedToSend))
} let uploadTask = ossClient?.putObject(ossPutObj) uploadTask?.continue({ (uploadTask) -> Any? in if let _err = uploadTask.error {
print(_err)
} else {
if (uploadTask.result as? OSSPutObjectResult) != nil {
//上传成功后预览地址自行拼接
}
}
return uploadTask
}) }

  

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

  

, UINavigationControllerDelegate




swift3.0 从相册选取或者拍照上传图片至阿里云OSS的更多相关文章

  1. 上传图片到阿里云OSS和获取上传图片的外网url的步骤

    啥都不说  直接上代码 1.html: <form action="/bcis/api/headImgUpload.json" method="post" ...

  2. Java中使用RestFul接口上传图片到阿里云OSS服务器

    1.接口方法 import java.io.IOException; import javax.servlet.http.HttpServletRequest; import org.springfr ...

  3. vue中上传图片至阿里云oss

    1.开通阿里云的oss服务这些这里就不多做介绍了 2.登入阿里云的后台管理系统创建一个Bucket 3.在后台管理系统中进入访问控制 4.点击用户管理->新建用户->填写相关信息,就生成了 ...

  4. 上传图片到阿里云oss

    阿里云地址 登录阿里云管理控制台,创建对象存储oss private static final String endpoint = "http://oss-cn-shanghai.aliyu ...

  5. TP框架上传图片至阿里云oss

    首先安装阿里云oss扩展: composer require aliyuncs/oss-sdk-php 如果这个安装不上可以直接下载SDK的包: 链接:https://pan.baidu.com/s/ ...

  6. swoft 上传图片到 阿里云oss aliyun-oss

    1.swoft  获取上传的文件 .官方文档上面没有看到 $files = $request->getUploadedFiles(); $file = $files['file']; 2.在模型 ...

  7. laravel使用阿里云OSS上传图片

    需要自己注册阿里云账号并且开通oss服务,建立Bucket存储空间,此步骤不做演示 一.composer安装:使用composer在项目根目录执行以下命令 composer require johnl ...

  8. swift3.0调用相册

    swift3.0调用相册首先需要注意: 1.swift3.0中调用相机和相册会导致崩溃 1.需要在info.plist文件中加入两个键值对,如下: /// 都是String类型,内容任意的字符串即可 ...

  9. koa2使用阿里云oss的nodejs sdk实现上传图片

    nodejs实现上传图片到阿里云,自然是写成接口形式比较方便,前端监听input file的改变,把file对象传入到formData中传入后端,不能直接传入file对象,后端需要接受formData ...

随机推荐

  1. Linux下pecl命令无法执行的解决

    pecl install swoole 提示如下错误:bash: pecl: command not found执行yum install php-pear生效

  2. DataFrame操作方式

    DataFrame/DataSet 操作 Databricks 不止一次提到过希望未来在编写 Spark 应用程序过程中,对于结构化/半结构化数据,使用 Datasets(DataFrame 的扩展) ...

  3. FFT/NTT 多项式学习笔记

    FFT(快速傅立叶变换)和NTT(快速数论变换)看上去很高端,真正搞懂了就很simple了辣. 首先给出多项式的一些定义(初中数学内容): 形如Σaixi的式子就是多项式! 多项式中每个单项式叫做多项 ...

  4. Windows10 Enterprise版本周年更新问题

    安装Windows10的时候,蛋疼选择了企业版本,导致后来周年更新遇到了蛋疼的问题. 首先是无法接收到周年更新的推送.记得首个周年更新的时候,等了大半年都没有.后来使用了易升进行更新,可以检测到,但是 ...

  5. java在的数据类型

    java数据类型的划分 程序的本质=数据的处理: 数据库的本质=数据的存储. java之中数据类型一共分为两大类. ·基本数据类型: 数值型: 整型:byte,short,int,long 默认值都是 ...

  6. lsdslam代码笔记

    0.1. question 0.2. 算法框架 0.3. 代码解析 0.3.1. 数据结构 0.3.1.1. Frame 0.3.1.2. FrameMemory 0.3.1.3. FramePose ...

  7. webpack的Hot Module Replacement运行机制

    使用webpack打包,难免会使用Hot Module Replacement功能,该功能能够实现修改.添加或删除前端页面中的模块代码,而且是在页面不刷新的前提下.它究竟是怎么运作的呢?本文主要从调试 ...

  8. MySQL学习笔记(三)

    --回顾 字段类型(列类型):数值型,时间日期型和字符串类型 数值型:整型和小数型(浮点型和定点型) 时间日期型:datetime,date,time,timestamp,year 字符串类型:定长, ...

  9. 进击的新版NavMesh系统:看我飞檐走壁

    0x00 前言 unity5.6作为Unity5最后的一个版本,的确起到了一个承上启下的作用.除了上一篇文章<进击的AssetBundles和它的工具们>中提到的AssetBundles- ...

  10. Win10系统下安装Oracle服务器和Oracle客户端

    工作电脑从Win7换为Win10,在给Win10系统安装Oracle时花费了很长世间终于搞定,在此给大家分享下. 1.工作中需要连接测试环境.生产环境Oracle,所以安装了公司封装的Oracle客户 ...