Swift - HTTP网络操作库Alamofire使用详解2(文件上传)

[快速学会Swift第三方库] Alamofire篇 [一分钟学会Swift第三方库] Alamofire篇Alamofire是 Swift 语言的 HTTP 网络开发工具包,AFNetworking的 Swift 版,使用起来相当简单。目录一分钟学会Swift第三方库 Alamofire篇 目录 编码之前 导入Alamofire 添加寻找路径 Web请求 示例代码 运行结果 数据请求JSON 示例代码 运行结果 上传文件 示例代码 运行结果 下载 阅读详情


六,使用Alamofire进行文件上传

1,Alamofire支持如下上传类型:
File
Data
Stream
MultipartFormData

2,使用文件流的形式上传文件
1
2
3
4
5
6
let  fileURL =  Bundle .main.url(forResource:  "hangge" , withExtension:  "zip" )
 
Alamofire .upload(fileURL!, to:  "http://www.hangge.com/upload.php" )
     .responseJSON { response  in
         debugPrint(response)
     }
  附:服务端代码(upload.php)
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 )){  
         $streamData  =  file_get_contents ( 'php://input' );  
     }  
   
     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 ));  
?>
如何在上传时附带上文件名?
有时我们在文件上传的同时还会想要附带一些其它参数,比如文件名。这样服务端接收到文件后,就可以根据我们传过来的文件名来保存。实现这个其实很简单,客户端和服务端分别做如下修改。
  • 客户端:将文件名以参数的形式跟在链接后面。比如:http://hangge.com/upload.php?fileName=image1.png
  • 服务端:通过 $_GET["fileName"] 得到这个参数,并用其作为文件名保存。

3,上传时附带上传进度
1
2
3
4
5
6
7
8
9
let  fileURL =  Bundle .main.url(forResource:  "hangge" , withExtension:  "zip" )
 
Alamofire .upload(fileURL!, to:  "http://www.hangge.com/upload.php" )
     .uploadProgress { progress  in  // main queue by default
         print ( "当前进度: \(progress.fractionCompleted)" )
     }
     .responseJSON { response  in
         debugPrint(response)
     }
可以看到控制台不断输出已上传的进度(1则表示上传完毕): 


4,上传MultipartFormData类型的文件数据(类似于网页上Form表单里的文件提交) 
(1)上传两个文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
let  fileURL1 =  Bundle .main.url(forResource:  "hangge" , withExtension:  "png" )
let  fileURL2 =  Bundle .main.url(forResource:  "hangge" , withExtension:  "zip" )
 
Alamofire .upload(
     multipartFormData: { multipartFormData  in
         multipartFormData.append(fileURL1!, withName:  "file1" )
         multipartFormData.append(fileURL2!, withName:  "file2" )
     },
     encodingCompletion: { encodingResult  in
         switch  encodingResult {
         case  .success( let  upload, _, _):
             upload.responseJSON { response  in
                 debugPrint(response)
             }
         case  .failure( let  encodingError):
             print (encodingError)
         }
     }
)
  附:服务端代码(upload2.php)
1
2
3
4
5
6
7
<?  
move_uploaded_file( $_FILES [ "file1" ][ "tmp_name" ],
     $_SERVER [ "DOCUMENT_ROOT" ]. "/uploadFiles/"  .  $_FILES [ "file1" ][ "name" ]);
 
move_uploaded_file( $_FILES [ "file2" ][ "tmp_name" ],
     $_SERVER [ "DOCUMENT_ROOT" ]. "/uploadFiles/"  .  $_FILES [ "file2" ][ "name" ]);
?>

(2)文本参数与文件一起提交(文件除了可以使用fileURL,还可以上传NSData类型的文件数据)
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
//字符串
let  strData =  "hangge.com" .data(using:  String . Encoding .utf8)
//数字
let  intData =  String (10).data(using:  String . Encoding .utf8)
//文件1
let  path =  Bundle .main.url(forResource:  "hangge" , withExtension:  "png" )!
let  file1Data = try!  Data (contentsOf: path)
//文件2
let  file2URL =  Bundle .main.url(forResource:  "hangge" , withExtension:  "zip" )
 
Alamofire .upload(
     multipartFormData: { multipartFormData  in
         multipartFormData.append(strData!, withName:  "value1" )
         multipartFormData.append(intData!, withName:  "value2" )
         multipartFormData.append(file1Data, withName:  "file1" ,
                                  fileName:  "h.png" , mimeType:  "image/png" )
         multipartFormData.append(file2URL!, withName:  "file2" )
     },
     encodingCompletion: { encodingResult  in
         switch  encodingResult {
         case  .success( let  upload, _, _):
             upload.responseJSON { response  in
                 debugPrint(response)
             }
         case  .failure( let  encodingError):
             print (encodingError)
         }
     }
)
  附:服务端代码(upload2.php)
1
2
3
4
5
6
7
8
9
10
<? 
$value1  =  $_POST [ "value1" ];
$value2  =  $_POST [ "value2" ];
 
move_uploaded_file( $_FILES [ "file1" ][ "tmp_name" ],
     $_SERVER [ "DOCUMENT_ROOT" ]. "/uploadFiles/"  .  $_FILES [ "file1" ][ "name" ]);
  
move_uploaded_file( $_FILES [ "file2" ][ "tmp_name" ],
     $_SERVER [ "DOCUMENT_ROOT" ]. "/uploadFiles/"  .  $_FILES [ "file2" ][ "name" ]);
?>

原文出自: www.hangge.com   转载请保留原文链接: http://www.hangge.com/blog/cache/detail_971.html
Swift 之 Alamofire 网络请求、取消请求 前言 Alamofire是一个使用Swift开发的网络请求库,其开发团队是AFNetworking的原团队。它语法简洁,采用链式编程的思想,使用起来是相当的舒服。本质是基于NSURLSession进行封装。接下开我们就进入实战,开始学习Alamofire的使用。本篇主要简介Alamofire的基础使用,如果您对Alamofire的封装库Moya也感兴趣可移步Moya+ RxSwift+Handy 阅读详情

相关推荐

使用Alamofire实现Swift中的文件下载

Swift是苹果公司开发的一种安全、现代、性能优越的编程语言,专为Apple平台设计。它为开发iOS、macOS、watchOS和tvOS应用程序提供了快速而高效的方式。Alamofire是一个基于Swift的网络库,专注于iOS和macOS,简化了复杂的HTTP操作,提供了更易用的API接口。它支持多种HTTP任务的执行,如GET、POST、PUT、PATCH和DELETE等。文件下载通常指的是一种从远程服务器获取数据的过程。

weixin_35748962的博客 1303

ios swift alamofire 上传图片(文件),上传进度

参考博客: Swift - HTTP网络操作库Alamofire使用详解2(文件上传) Swift中文件和图片上传处理 用最新的 Alamofire(swift 4.1) (带参数)post方法上传图片到服务器

baidu_40537062的博客 2870

Xilinx FPGA 100G RDMA开发实战:基于AXI Lite配置的ROCE V2高速通信系统搭建

本文详细介绍了在Xilinx FPGA上搭建100G ROCE V2高速通信系统的实战过程。通过分析RDMA技术优势与FPGA实现的必要性,重点阐述了基于AXI Lite接口配置ERNIC IP核的关键步骤,包括硬件系统构建、驱动开发及与商用网卡的互通测试,旨在实现兼具高性能与灵活性的网络加速方案。

js777的博客 575

解决 Alamofire 文件上传重定向崩溃问题

通过手动处理Alamofire文件上传中的重定向,我们可以避免常见的崩溃问题,并确保文件上传流程的顺利完成。但这并不是唯一的解决方案,无论是重定向处理还是网络请求调试,灵活应对和深入理解 API 的行为都是开发中的关键。

weixin_39339407的博客 707

APB Timer验证环境搭建——学习笔记(6)

(1)为RELOAD VALUE配置初始值32'h8000_0000,设定边界值32'h4000_0000,可以看到减到想要的边界值的时候,counter重新加载RELOAD VALUE,重新开始计数;这根线,统计等待到中断的次数,与理论值做。(2)设定Reload value。(1)由于counter。recount总共次数;

qq_41651535的博客 497

芯片散热技术突破:多尺度结构与VC集成方案解析

在半导体技术快速发展的背景下,芯片散热成为制约性能提升的关键瓶颈。传统散热技术如风冷和水冷已接近物理极限,而两相浸没式液冷技术凭借其超高传热系数成为新的解决方案。通过多尺度表面结构设计与真空腔均热板(Vapor Chamber)的集成创新,可以显著提升沸腾性能,降低沸腾起始温差(ONB)并突破临界热流密度(CHF)限制。这种技术在数据中心、高性能计算(HPC)和边缘计算等高热流密度场景中具有重要应用价值,能有效提升能效比(PUE)并降低能耗。

weixin_36288992的博客 151

swift-Alamofire向服务器按参数传文件

Alamofire向服务器按参数传文件 网上很多资料都是只说怎么向服务器上传文件,而且版本也比较老,放到现在根本用不上了。有时不是单纯地传文件,是要带参数传一系列值,文件只是其中的一个。比如一个接口,需要你以键值对的形式上传3个值:key1-“aaa”;key2-“bbb”;key3-[图片]。其中前两个参数的值是字符类型的,第三个参数要求你传一个图片,那使用Alamofire要怎么操作呢?直接上...

Captain的漫谈人生 873

从原理图到代码:深入解析SX1278 LoRa模块与STM32的SPI通信驱动(附完整工程)

本文深入解析了SX1278 LoRa模块与STM32的SPI通信驱动实现,从硬件原理图到完整工程代码,详细介绍了LoRa技术的通信原理、寄存器配置、SPI接口设计及低功耗优化策略。适合物联网开发者和嵌入式工程师提升远距离无线通信能力,附完整工程代码助力快速开发。

weixin_42715608的博客 423

iOS实际开发中使用Alamofire实现多文件上传(以个人相册为例)

本篇博客主要介绍了使用Alamofire实现多文件的上传功能,关于文件上传的具体方案还是需要根据服务端的接口设计来实施。本文以同步用户相册为例,将上传相册图片分为两个部分,上传和同步,当所有资源上传完成之后,执行相册的同步操作。并使用信号量来控制上传的最大并发数。希望本篇博客能够在文件上传中给大家一些启发。

weixin_39339407的博客 1868

LDO稳定性分析

根据补偿方式和拓扑结构的不同,三个极点之间的相互位置有可能发生变化,但 是 LDO 通常采用较大的输出电容 Cout,以及较大的调整管也会导致较大的 Cpar, 所以 p1、p2 通常位于较低的频率处,而 p3 和 z1 则由于 Resr较小会位于较高的频 率处。不过幸运的是,对于较大的 Cout来说,只要选择合适的 Resr,就可以将左半平面零点 Z1 的频率降低,甚至使 Z1 进入单位增益带宽内,左半平面零点的进入将对相位有所改善,这不仅可以消除振荡的风险,还可以在单位增益频率处得到较好的相位裕度。

模拟芯片设计 1592

华为ENSP虚拟网络与本地物理网卡高效桥接实战指南

本文提供了一份详细的华为ENSP虚拟网络与本地物理网卡桥接实战指南。通过清晰的四步操作,帮助用户打破虚拟实验环境的“孤岛”限制,实现ENSP设备与真实局域网及互联网的互通,从而进行更真实的协议测试、软件升级和混合网络环境搭建。

qsc90123456的博客 537

swift单节点配置遇到的一些问题和解决办法,希望大家补充

下面是我和同事在配置时候遇到的一些问题(swift 1.1版本),遇到问题一般可以查看/var/log/syslog日志文件 还可以去https://answers.launchpad.net/swift/+questions?field.search_text=&field.sort=RELEVANCY&field.sort-empty-marker=1&field.actions.searc

tangguoqiang870102的专栏 1208

PointNetLK实战:5步搞定点云配准(附ModelNet40数据集训练技巧)

本文提供了一份详细的PointNetLK实战指南,帮助读者在5步内掌握点云配准技术。文章以ModelNet40数据集为例,深入讲解了环境搭建、数据预处理、模型训练与调试等核心步骤,并分享了关键的训练技巧和调参策略,旨在让开发者快速实现并应用这一高效的深度学习配准方法。

wind6的博客 462

swift网络库Alamofire的安装及简单使用,苹果开发必备

Alamofire是一个基于Swift语言开发的优秀网络请求库。它封装了底层的网络请求工作,提供了更简单、更易用的接口,大大简化了网络请求代码的编写。Alamofire提供了一套优雅且易于理解的API,使得开发者可以轻松发起各种类型的HTTP请求。它支持GET、POST、PUT、DELETE等常用的请求方法,并且提供了丰富的参数设置选项。Alamofire提供了强大的响应处理功能,支持数据解析、文件上传和下载等常见需求。它基于Swift的特性和语法,代码简洁、可读性强,易于维护和扩展。

2447

labview高低拼接的理解

计算机的一个字节由8位组成,无符号的8位整形表示的范围为0~255,范围太小了,所以用双字节,即16位整形表示更大范围的数字0 ~65535。2.labview中的高低拼接实质是高8位字节左移8位与低8位字节相加,结果是双字节整形。

qwerqwerdhr的博客 834

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Swift 中AFNetworking 的替代方案 Alamofire

Alamofire 是 Swift 语言的 HTTP 网络开发工具包,功能强大,支持各种 HTTP Method、JSON、文件上传、文件下载和多种认证方法。 AFNetworking的作者全新力作,原生Swfit语言编写,基本可以满足Swift中网络编程开发。   github的URL为: https://github.com/Alamofire/Alamofire g

skykingf的专栏 2万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【iOS_Swift_Alamofire实现网络请求】

学习swift继续延续之前的思路,对照着OC学,从UI起手,学习到对应的自适应布局。今天再次学习了swift的原生网络请求和对应的第三方库-Alamofire。和AFN库一样使用起来简单快捷,swift的语言特性安全在很多处都会体现,接下来会学习swift的原声json Model解析库。

weixin_61639290的博客 3951

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Alamofire - Swift 下的优雅 HTTP 网络库

Alamofire 是一个用 Swift 编写的 HTTP 网络库,基于 Foundation URL 加载系统,提供了优雅的 API 设计,让网络请求变得更加简单高效。

分享技术点滴 511

Alamofire-Swift Networking网络库

Alamofire是 Swift 语言的 HTTP 网络开发工具包,相当于Swift实现AFNetworking版本。 当然,AFNetworking非常稳定,在Mac OSX与iOS中也能像其他Objective-C代码一样用Swift编写。不过Alamofire更适合Swift语言风格习惯(Alamofire与AFNetworking可以共存一个项目中,互不影响). Alamo

xiaoyangsavvy的专栏 709

swift - Alamofire 网络请求

Alamofire是一个swift语言的网络开源库,主要用于网络请求,响应操作,响应校验,响应缓存其基本用法如下:进行网络请求、响应操作、响应校验、响应缓存http方式、parameter编码、http headers 、验证数据的上传与下载工具类有CURL command outPut、statical metrics高级用法url 绘话管理、绘话代理、绘话请求routing请求操作model ...

die_word的博客 1712

Alamofire网络库基础教程:使用 Alamofire 轻松实现 Swift 网络请求(一)

本章节由CocoaChina翻译组成员星夜暮晨(博客)翻译自raywenderlich:Beginning Alamofire Tutorial,敬请勘误。 AFNetworking是 iOS 和 OS X 上最受欢迎的第三方库之一。它曾在我们的2012年的读者评选中荣获2012年度最佳 iOS 库称号。它同样也在 Github 上面获得了14000多个 stars 和4000多

sunyazhou13的专栏 1163

探索 Alamofire:Swift 中的优雅网络通信

探索 Alamofire:Swift 中的优雅网络通信 【免费下载链接】Alamofire Alamofire/Alamofire: Alamofire 是一个用于 iOS 和 macOS 的网络库,提供了 RESTful API 的封装和 SDK,可以用于构建网络应用程序和 Web 服务。 ...

gitblog_00051的博客 813

Kakapo与Alamofire集成教程:构建无后端的Swift应用原型

在Swift开发中,快速构建应用原型往往受限于后端API的开发进度。Kakapo作为一款强大的动态Mock服务器工具,能帮助开发者在无后端环境下模拟API行为和响应,而Alamofire则是Swift生态中最流行的网络请求库。本教程将详细介绍如何将两者无缝集成,让你轻松实现无后端开发,显著提升iOS应用原型的开发效率。 ## 为什么选择Kakapo与Alamofire组合? Kakapo是一个

gitblog_00885的博客 930

开源项目推荐:Alamofire —— 精致优雅的Swift网络通信库

开源项目推荐:Alamofire —— 精致优雅的Swift网络通信库 【免费下载链接】Alamofire Alamofire/Alamofire: Alamofire 是一个用于 iOS 和 macOS 的网络库,提供了 RESTful API 的封装和 SDK,可以用于构建网络应用程序和 Web 服务。 ...

gitblog_00050的博客 1611

Alamofire 使用教程

Alamofire 使用教程 【免费下载链接】Alamofire Alamofire/Alamofire: Alamofire 是一个用于 iOS 和 macOS 的网络库,提供了 RESTful API 的封装和 SDK,可以用于构建网络应用程序和 Web 服务。 ...

gitblog_00271的博客 1241

Swift - HTTP网络操作库Alamofire使用详解1(配置,以及数据请求)

Swift - HTTP网络操作库Alamofire使用详解1(配置,以及数据请求) 2015-12-07 相关文章系列:(文章代码均已升级至Swift3) [当前文章] Swift - HTTP网络操作库Alamofire使用详解1(配置,以及数据请求) Swift - HTTP网络操作库Alamofire使用详解2(文件上传) Swift - HTTP网络

iOS_yanmy的博客 3860
上一篇: Swift - HTTP网络操作库Alamofire使用详解1(配置,以及数据请求)
下一篇: Swift 头像上传(2)http://blog.youkuaiyun.com/wei_chong_chong/article/details/52611110
iOS_yanmy
博客等级 码龄10年 14粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值