swift3.0 从相册选取或者拍照上传图片至阿里云OSS
- 导入相应的库
- 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的更多相关文章
- 上传图片到阿里云OSS和获取上传图片的外网url的步骤
啥都不说 直接上代码 1.html: <form action="/bcis/api/headImgUpload.json" method="post" ...
- Java中使用RestFul接口上传图片到阿里云OSS服务器
1.接口方法 import java.io.IOException; import javax.servlet.http.HttpServletRequest; import org.springfr ...
- vue中上传图片至阿里云oss
1.开通阿里云的oss服务这些这里就不多做介绍了 2.登入阿里云的后台管理系统创建一个Bucket 3.在后台管理系统中进入访问控制 4.点击用户管理->新建用户->填写相关信息,就生成了 ...
- 上传图片到阿里云oss
阿里云地址 登录阿里云管理控制台,创建对象存储oss private static final String endpoint = "http://oss-cn-shanghai.aliyu ...
- TP框架上传图片至阿里云oss
首先安装阿里云oss扩展: composer require aliyuncs/oss-sdk-php 如果这个安装不上可以直接下载SDK的包: 链接:https://pan.baidu.com/s/ ...
- swoft 上传图片到 阿里云oss aliyun-oss
1.swoft 获取上传的文件 .官方文档上面没有看到 $files = $request->getUploadedFiles(); $file = $files['file']; 2.在模型 ...
- laravel使用阿里云OSS上传图片
需要自己注册阿里云账号并且开通oss服务,建立Bucket存储空间,此步骤不做演示 一.composer安装:使用composer在项目根目录执行以下命令 composer require johnl ...
- swift3.0调用相册
swift3.0调用相册首先需要注意: 1.swift3.0中调用相机和相册会导致崩溃 1.需要在info.plist文件中加入两个键值对,如下: /// 都是String类型,内容任意的字符串即可 ...
- koa2使用阿里云oss的nodejs sdk实现上传图片
nodejs实现上传图片到阿里云,自然是写成接口形式比较方便,前端监听input file的改变,把file对象传入到formData中传入后端,不能直接传入file对象,后端需要接受formData ...
随机推荐
- linux统计cdn日志慢请求
./stat_ip.sh live-https.log-0510.gz 1000 #首先用shell脚本可以统计出?日志慢请求查询时间超过?秒对应的ip和对应的调用次数(传两个参数) #!/bin/b ...
- eclipse在多modules项目结构下避免模块间依赖引用的场景
这个在单一classLoader时,不会有问题.如果多classloader下会有问题. 假设工程有两个模块,module2 依赖module1 当我们执行mvc eclipse:eclipse后,然 ...
- html网页的兼容性和css优先级
网页不仅是在一个浏览器上显示的网页,也要多考虑其他浏览器的兼容性,火狐.谷歌.搜狗等浏览器总体来说,网页的变化不大,最主要的是还是IE浏览器. color:red\9; IE6 IE7 IE8 ...
- 在MacOS中,Unity使用VSCode开发,4.7版本无法正常使用C#
我在MacOS中安装了两个版本的Unity,一个是4.7版本,一个是5.6版本,在5.6版本中使用VSCode打开项目时,可以正常代码提示和查看,但是打开4.7版本的项目时,无法正常提示和查看. 经过 ...
- 【Python3之多进程】
一.进程和线程的简单解释 进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握. 用生活举例: (转自阮一峰网络日志) 1.计算机的核心是CPU,它承担了所有 ...
- ES6的转换器
---恢复内容开始--- ES6代码转为ES5代码的转换器 1.Babel 2.Traceur,Google公司出品 Babel是一个广泛使用的ES6转码器,可以将ES6代码转为ES5代码,从而在现有 ...
- 缓动动画(json)
function animate(obj, json){ clearInterval(obj.timer); obj.timer=setInterval(function(){ var flag = ...
- 工程经验总结之吹水"管理大境界"
1.个人认为项目管理最核心的能力是预见风险和快速解决风险的能力. 从实践来看,没有百分百的完美计划,任何计划都有出现偏差的可能,或者说计划总是不会按照最初的设定去完美执行的. 项目经理存在的主要价值就 ...
- maven简介及基础使用
一.Maven简介 Maven可译为"知识的积累"."专家",主要服务于基于Java平台的项目构建.依赖管理和项目信息管理. 1.Maven-项目构建工具 ...
- 禅道SQA
背景 近期以项目质量和测试管理的角色介入了一个大型的项目中间,项目的业务测试方面重点在节点把控和风险跟进. 以往进行测试进度展示是通过bug解决进度及整体走势图来进行体现,这块手工作图太过麻烦,干脆整 ...