swift -从相册中选择照片并上传


原文出自:www.hangge.com 转载请保留原文链接:http://www.hangge.com/blog/cache/detail_1174.html
1
|
assets-library: //asset/asset.PNG?id=90B54369-5E79-433D-B74A-E8E0870EAF27&ext=PNG |
用这个路径是没法上传文件的。想要把选择的图片上传,通常我们会想到如下两种方式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
import UIKit import Alamofire class ViewController : UIViewController , UIImagePickerControllerDelegate , UINavigationControllerDelegate { override func viewDidLoad() { super .viewDidLoad() } //选取相册 @IBAction func fromAlbum(sender: AnyObject ) { //判断设置是否支持图片库 if UIImagePickerController .isSourceTypeAvailable(. PhotoLibrary ){ //初始化图片控制器 let picker = UIImagePickerController () //设置代理 picker.delegate = self //指定图片控制器类型 picker.sourceType = UIImagePickerControllerSourceType . PhotoLibrary //弹出控制器,显示界面 self .presentViewController(picker, animated: true , completion: { () -> Void in }) } else { print ( "读取相册错误" ) } } //选择图片成功后代理 func imagePickerController(picker: UIImagePickerController , didFinishPickingMediaWithInfo info: [ String : AnyObject ]) { //获取选择的原图 let pickedImage = info[ UIImagePickerControllerOriginalImage ] as ! UIImage //将选择的图片保存到Document目录下 let fileManager = NSFileManager .defaultManager() let rootPath = NSSearchPathForDirectoriesInDomains (. DocumentDirectory , . UserDomainMask , true )[0] as String let filePath = "\(rootPath)/pickedimage.jpg" let imageData = UIImageJPEGRepresentation (pickedImage, 1.0) fileManager.createFileAtPath(filePath, contents: imageData, attributes: nil ) //上传图片 if (fileManager.fileExistsAtPath(filePath)){ //取得NSURL let imageNSURL: NSURL = NSURL . init (fileURLWithPath: filePath) //使用Alamofire上传 .responseString { response in print ( "Success: \(response.result.isSuccess)" ) print ( "Response String: \(response.result.value)" ) } } //图片控制器退出 picker.dismissViewControllerAnimated( true , completion: nil ) } override func didReceiveMemoryWarning() { super .didReceiveMemoryWarning() } } |
不管使用模拟器还是真机调试,运行后可以看到图片上传成功了:

方法二:使用PhotoKit获取选择图片的真实路径,再上传
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
在这里留下你想说的话。 import UIKit import Alamofire import Photos class ViewController : UIViewController , UIImagePickerControllerDelegate , UINavigationControllerDelegate { override func viewDidLoad() { super .viewDidLoad() } //选取相册 @IBAction func fromAlbum(sender: AnyObject ) { //判断设置是否支持图片库 if UIImagePickerController .isSourceTypeAvailable(. PhotoLibrary ){ //初始化图片控制器 let picker = UIImagePickerController () //设置代理 picker.delegate = self //指定图片控制器类型 picker.sourceType = UIImagePickerControllerSourceType . PhotoLibrary //弹出控制器,显示界面 self .presentViewController(picker, animated: true , completion: { () -> Void in }) } else { print ( "读取相册错误" ) } } //选择图片成功后代理 func imagePickerController(picker: UIImagePickerController , didFinishPickingMediaWithInfo info: [ String : AnyObject ]) { //选择图片的引用路径 let pickedURL: NSURL = info[ UIImagePickerControllerReferenceURL ] as ! NSURL let fetchResult: PHFetchResult = PHAsset .fetchAssetsWithALAssetURLs([pickedURL], options: nil ) let asset: PHAsset = fetchResult.firstObject as ! PHAsset PHImageManager .defaultManager() .requestImageDataForAsset(asset, options: nil , resultHandler: { (imageData: NSData ?, dataUTI: String ?, orientation: UIImageOrientation , info: [ NSObject : AnyObject ]?) in //获取实际路径 let imageNSURL: NSURL = info![ "PHImageFileURLKey" ] as ! NSURL print ( "路径:" ,imageNSURL) print ( "文件名:" ,imageNSURL.lastPathComponent) //使用Alamofire上传 .responseString { response in print ( "Success: \(response.result.isSuccess)" ) print ( "Response String: \(response.result.value)" ) } }) //图片控制器退出 picker.dismissViewControllerAnimated( true , completion: nil ) } override func didReceiveMemoryWarning() { super .didReceiveMemoryWarning() } } |
使用模拟器运行后,可以看到图片上传成功了:


Swift - HTTP网络操作库Alamofire使用详解1(配置,以及数据请求)
Swift - HTTP网络操作库Alamofire使用详解2(文件上传)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
<?php /** php 接收流文件 * @param String $file 接收后保存的文件名 * @return boolean */ function receiveStreamFile( $receiveFile ){ $streamData = isset( $GLOBALS [ 'HTTP_RAW_POST_DATA' ])? $GLOBALS [ 'HTTP_RAW_POST_DATA' ] : '' ; if ( empty ( $streamData )){ } if ( $streamData != '' ){ $ret = file_put_contents ( $receiveFile , $streamData , true); } else { $ret = false; } return $ret ; } //定义服务器存储路径和文件名 $receiveFile = $_SERVER [ "DOCUMENT_ROOT" ]. "/uploadFiles/hangge.zip" ; $ret = receiveStreamFile( $receiveFile ); echo json_encode( array ( 'success' =>(bool) $ret )); ?> |
原文出自:www.hangge.com 转载请保留原文链接:http://www.hangge.com/blog/cache/detail_1174.html
swift -从相册中选择照片并上传的更多相关文章
- 从系统相册中选择GIF图片上传到服务器
-(void)assetPickerController:(ZYQAssetPickerController *)picker didFinishPickingAssets:(NSArray *)as ...
- android: 从相册中选择照片
虽然调用摄像头拍照既方便又快捷,但并不是每一次我们都需要去当场拍一张照片的. 因为每个人的手机相册里应该都会存有许许多多张照片,直接从相册里选取一张现有的照 片会比打开相机拍一张照片更加常用.一个优秀 ...
- Swift - 从相册中选择视频(过滤掉照片,使用UIImagePickerController)
(本文代码已升级至Swift4) 有时我们需要从系统相册中选择视频录像,来进行编辑或者上传操作,这时使用 UIImagePickerController 就可以实现. 默认情况下,UIImagePic ...
- ios中摄像头/相册获取图片压缩图片上传服务器方法总结
本文章介绍了关于ios中摄像头/相册获取图片,压缩图片,上传服务器方法总结,有需要了解的同学可以参考一下下. 这几天在搞iphone上面一个应用的开发,里面有需要摄像头/相册编程和图片上传的问 ...
- jsp实现仿QQ空间新建多个相册名称,向相册中添加照片
工具:Eclipse,Oracle,smartupload.jar:语言:jsp,Java:数据存储:Oracle. 实现功能介绍: 主要是新建相册,可以建多个相册,在相册中添加多张照片,删除照片,删 ...
- MUI 单个图片上传预览(拍照+系统相册):先选择->预览->上传提交
1 html部分 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...
- Laravel中的日志与上传
PHP中的框架众多,我自己就接触了好几个.大学那会啥也不懂啥也不会,拿了一个ThinkPHP学了.也许有好多人吐槽TP,但是个人感觉不能说哪个框架好,哪个框架不好,再不好的框架你能把源码读上一遍,框架 ...
- Spring中MultipartHttpServletRequest实现文件上传
Spring中MultipartHttpServletRequest实现文件上传 转贴自:http://my.oschina.net/nyniuch/blog/185266 实现图片上传 用户必须能 ...
- SecureCRT中的ftp文件上传
原文地址:http://www.blogbus.com/jjuan-flake-logs/59745331.html SecureCRT与SshClient不同的就是,SecureCRT没有图形化的文 ...
随机推荐
- 洛谷 P3203 [HNOI2010]弹飞绵羊 || bzoj2002
看来这个lct板子的确没什么问题 好像还可以分块做 #include<cstdio> #include<algorithm> using namespace std; type ...
- ssrs 2016, mobile report error: The report may be misconfigured, the data may not be available, or the server version may be unsupported.
使用多账户配置ssrs mobile report 权限后,使用客户端显示: 使用web 查阅,显示: 遇到这种情况,可能是由于,report引用了 数据集文件夹中的数据集,请记得把数据集文件夹上为该 ...
- PHP 简单答题系统
--sample 1: <!DOCTYPE html><html><head> <title>登录</title> <style ty ...
- 223 Rectangle Area 矩形面积
在二维平面上计算出两个由直线构成的矩形叠加覆盖后的面积. 假设面积不会超出int的范围. 详见:https://leetcode.com/problems/rectangle-area/descrip ...
- 掌握Spark机器学习库-08.7-决策树算法实现分类
数据集 iris.data 数据集概览 代码 package org.apache.spark.examples.examplesforml import org.apache.spark.Spark ...
- Python学习 Day 2-数据类型和变量
数据类型和变量 在Python中,能够直接处理的数据类型有以下几种: 整数 Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样,例如:1,100,-8080, ...
- postgresql update from
1,update from 关联表的更新 update table a set name=b.name from table B b where a.id=b.id; update test ...
- python strip() 函数探究
strip()方法语法:str.strip([chars]); 声明:str为字符串,rm为要删除的字符序列 str.strip(rm) 删除字符串中开头.结尾处,位于rm删除序列的字符 eg1: # ...
- codeforces_1065_D.three pieces_思维
题意:一个正方形棋盘,三种棋子,knight:像中国象棋中的马一样走:bishop:斜着走:rook:中国象棋中的车.棋盘中每个格子中标着1--n*n的互不相同的数字,从1开始任选一种棋子开始走,在每 ...
- arch - 显示机器的体系结构
总览 (SYNOPSIS) arch 描述 (DESCRIPTION) arch 等同于 uname -m. 目前的 Linux 系统上, arch 显示 的 数据 有 "i386" ...