[Xcode10 实际操作]八、网络与多线程-(17)使用网址会话对象URLSession向远程服务器上传图片

本文将演示如何通过网址会话对象URLSession向远程服务器上传图片。

网址会话对象URLSession具有在后台上传和下载、暂停和恢复网络操作、丰富的代理模式等优点。

在项目导航区,打开视图控制器的代码文件【ViewController.swift】

 1 import UIKit
 2
 3 class ViewController: UIViewController {
 4
 5     override func viewDidLoad() {
 6         super.viewDidLoad()
 7         // Do any additional setup after loading the view, typically from a nib.
 8
 9         //创建一个网址对象,作为上传图片的接口地址
10         let url = URL(string: "https://www.cnblogs.com/strengthen/yourUploadingURL")
11         //创建一个网络请求对象
12         let request = URLRequest(url: url!)
13         //网址会话URLSession在2013年发布,苹果对它的定位是作为旧的网络请求接口的替代者。
14         //这里获得网址会话的单例对象
15         let session = URLSession.shared
16
17         //创建一个字符串,作为等待上传的图片路径
18         let image = NSHomeDirectory() + "/Documents/yourImage.png"
19         //将图片内容转换为二进制数据
20         let imageData = try? Data(contentsOf: URL(fileURLWithPath: image))
21
22         //网址会话单例对象提供了三种类型的网络请求服务。
23         //1.数据任务
24         //2.上传任务
25         //3.下载任务
26         //此处创建一个上传任务的网络请求
27         let task = session.uploadTask(with: request,
28          from: imageData,
29          completionHandler: {(NSData, response:URLResponse?, error:Error?) -> Void in
30             //上传结束之后,判断错误信息是否存在,
31             //在控制台输出日志信息。
32             print("Uploading Finished")
33         })
34
35         //任务创建后,调用resume方法开始工作。
36         task.resume()
37     }
38
39     override func didReceiveMemoryWarning() {
40         super.didReceiveMemoryWarning()
41         // Dispose of any resources that can be recreated.
42     }
43 }

原文地址:https://www.cnblogs.com/strengthen/p/10063446.html

时间: 2024-10-08 21:57:17

[Xcode10 实际操作]八、网络与多线程-(17)使用网址会话对象URLSession向远程服务器上传图片的相关文章

[Xcode10 实际操作]八、网络与多线程-(8)使用同步Get方式查询某地天气

本文将演示如果通过Get的方式,请求某地天气信息,同步获取网络数据, 一旦发送同步请求,程序将停止用户交互,直至服务器返回数据. 为了增强数据访问的安全性,从9.0版本开始,Xcode默认会把所有的网络请求,修改为https安全请求. 也可以修改配置文件,以支持普通的网络请求. 点击打开[Info.plist]属性列表文件. 在配置文件编辑区的空白处,点击鼠标右键,弹出功能菜单. ->[Add Row] ->[Information Property List]在键列表中选择需要设置的键[Ap

[Xcode10 实际操作]八、网络与多线程-(11)使用同步Post方式查询IP地址信息

本文将演示如何通过Post请求,同步获取IP地址信息. 一旦发送同步请求,程序将停止用户交互,直至服务器返回数据. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] 1 import UIKit 2 3 class ViewController: UIViewController { 4 5 //给当前视图控制器类,添加一个标签属性. 6 //该标签对象,将用来显示远程服务器返回的信息 7 var label = UILabel() 8 9 override f

[Xcode10 实际操作]八、网络与多线程-(5)使用UIApplication对象发送邮件

本文将演示如何使用应用程序单例对象,发送邮件的功能. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] 注:需要使用真机进行测试. 1 import UIKit 2 3 class ViewController: UIViewController { 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 // Do any additional setup after loading the view

[Xcode10 实际操作]八、网络与多线程-(6)使用UIApplication对象打开地图

本文将演示如何使用应用程序单例对象,打开地图的功能. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] 1 import UIKit 2 3 class ViewController: UIViewController { 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 // Do any additional setup after loading the view, typically fr

[Xcode10 实际操作]九、实用进阶-(17)使用CGBlendMode改变UIImage颜色,实现对图片进行混合着色

本文将演示如何使用CGBlendMode改变UIImage颜色,实现对图片进行混合着色. 在项目文件夹[DemoApp]上点击鼠标右键 ->[New File]创建一个扩展文件->模板选择窗口:[Swift File]->[Next] ->[Save As]:ExtensionUIImage.swift->保存默认的存储位置点击[Create] 在[ExtensionUIImage.swift]添加一个针对UIImage类的扩展. 扩展可以向一个已有的类.结构体或枚举类型添加

iOS开发网络篇—多线程断点下载

iOS开发网络篇—多线程断点下载 说明:本文介绍多线程断点下载.项目中使用了苹果自带的类,实现了同时开启多条线程下载一个较大的文件.因为实现过程较为复杂,所以下面贴出完整的代码. 实现思路:下载开始,创建一个和要下载的文件大小相同的文件(如果要下载的文件为100M,那么就在沙盒中创建一个100M的文件,然后计算每一段的下载量,开启多条线程下载各段的数据,分别写入对应的文件部分). 项目中用到的主要类如下: 完成的实现代码如下: 主控制器中的代码: 1 #import "YYViewControl

网络与多线程的设计例子

上一篇的<网络与多线程设计模式>讲的是一些设备上的纯理论的东西,本篇将介绍一个本人写的使用EPoll+TcpServer+多线程的开源库,已在https://bitbucket.org/johnson_he/epolltcpserver中供开源下载. 该库使用了Qt的工程方式进行封装(实在不想写configure),里面的log也使用了log4Qt的方式进行,如果不想使用Qtcreator的话,可以自行引用tcpserver文件夹里面的所有文件即可. 使用Qtcreator的好处是,里面的de

java基础知识回顾之java Thread类学习(八)--java多线程通信等待唤醒机制经典应用(生产者消费者)

 *java多线程--等待唤醒机制:经典的体现"生产者和消费者模型 *对于此模型,应该明确以下几点: *1.生产者仅仅在仓库未满的时候生产,仓库满了则停止生产. *2.消费者仅仅在有产品的时候才能消费,仓空则等待. *3.当消费者发现仓储没有产品可消费的时候,会唤醒等待生产者生产. *4.生产者在生产出可以消费的产品的时候,应该通知等待的消费者去消费. 下面先介绍个简单的生产者消费者例子:本例只适用于两个线程,一个线程生产,一个线程负责消费. 生产一个资源,就得消费一个资源. 代码如下: pub

boost中asio网络库多线程并发处理实现,以及asio在多线程模型中线程的调度情况和线程安全。

1.实现多线程方法: 其实就是多个线程同时调用io_service::run for (int i = 0; i != m_nThreads; ++i)        {            boost::shared_ptr<boost::thread> pTh(new boost::thread(                boost::bind(&boost::asio::io_service::run,&m_ioService)));            m_l