导入相应的库
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. 架构漫谈系列(2) 封装(Encapsulation)

    这是这个系列的第二篇.在第二篇里,我决定讲一讲封装. 程序的不同部分应该用封装去互相隔离,模块之间应该不应该产生很随意的关联. 可能有的人觉得不解,又或觉得是有道理的废话,不急,先一步一步来. 我们先 ...

  2. 使用asp.net mvc部分视图渲染html

    为了提升用户体验,一般我们采用ajax加载数据然后根据数据渲染html,渲染html可以使用前端渲染和服务器端渲染. 前端渲染 使用前端模版引擎或MVC框架,例如underscore.js的templ ...

  3. panic和recover的使用规则

    转自个人博客 chinazt.cc 在上一节中,我们介绍了defer的使用. 这一节中,我们温习一下panic和recover的使用规则. 在golang当中不存在tye ... catch 异常处理 ...

  4. VS2015 +Qt5 串口工具

    简单的小工具是VS2015 + Qt5.6.1实现的,界面部分是Qt实现,串口是封装的WinAPI,把串口收发模块封装成了个Serialport.dll 供Qt界面调用. 由于VS2015需要CRT运 ...

  5. 关于标签中常用的disabled

    .children("option[disabled]").removeAttr('disabled');

  6. python 写csv文件

    一.只有一列内容: def create_file(self, a, b): # 上传csv 文件 # os.remove('openfile.csv') open_file = open('5000 ...

  7. laravel5.4+vue+element-ui配置及简单使用

    前言:网上能找到的关于这个方面的教程实在是太少啦,所以踩了好多坑,特意来分享一下,原创哦.想要打包带走的小伙伴还请注明出处

  8. JavaWeb 后端 <十三> 之 监听器 JSTL国际化

    1. 监听器 1.1   概述 监听器: 主要是用来监听特定对象的创建或销毁.属性的变化的! 是一个实现特定接口的普通java类! 对象: 自己创建自己用 (不用监听) 别人创建自己用 (需要监听) ...

  9. IE浏览器兼容

    IE6下面元素的宽高小于16PX时 会默认以16PX显示(最小宽高) 解决办法:设置元素overflow:hidden;   当文字全是字母或数字时会超容器对溢出隐藏的样式失效, 解决办法:设置下父级 ...

  10. [jbdj]SpringMVC框架(3)映射器

    映射器:什么样的请求交给Action. 1} class  :  BeanNameUrlHandlerMapping  要掌握, 将程序员定义的Action所对应的<bean>标签的nam ...