get请求
let now = Date()
let timeInterval:TimeInterval = now.timeIntervalSince1970
let timeStamp = String(timeInterval)
let url = URL(string: "http://47.92.107.28:8000/static/banner.f?_=\(timeStamp)")!
Alamofire.request(url,method: .get,parameters: nil,encoding: URLEncoding.default,headers:nil).responseJSON { response
in
switch response.result.isSuccess {
case true:
if let value = response.result.value{
self.imgageData = []
let img_json = JSON(value)
let json_str = img_json.rawString()
let zhu_url = "http://47.92.107.28:8000"
for(key,item) in img_json["imgs"] {
if let img_url = item["src"].string{
self.imgageData.append(zhu_url+img_url)
}
}
let str = self.imgageData.joined()
}
case false:
print(response.result.error)
UIAlertController.showAlert(message: "网络连接失败")
}
}
Get请求、有参数、使用Basic Auth授权访问(例如:jira)
var header:HTTPHeaders = [:]
if let authorizationHeader = Request.authorizationHeader(user: "xxxx", password: "xxxxxx") {
header[authorizationHeader.key] = authorizationHeader.value
}
// 此处的 URLEncoding.default (URLEncoding.queryString )会将parameters 拼接到url后面
Alamofire.request("https://httpbin.org/get", method: HTTPMethod.get, parameters: ["key":"value"], encoding: URLEncoding.default, headers: header).responseJSON { (response) in
if(response.error == nil){
LLog("请求成功")
LLog(response.result.value)
}else{
LLog("请求失败\(String(describing: response.error))")
}
}
POST请求
Alamofire.request("https://httpbin.org/post", method: .post, parameters: ["key1":"value1","key2":"value2"], encoding: URLEncoding.default, headers: nil).responseJSON { (response) in
if(response.error == nil){
LLog("请求成功")
LLog(response.result.value)
}else{
LLog("请求失败\(String(describing: response.error))")
}
}
post请求,提交json格式的数据
// JSONEncoding.default === JSONEncoding.prettyPrinted
Alamofire.request("https://httpbin.org/post", method: .post, parameters: ["key1":"value1","key2":"value2"], encoding: JSONEncoding.default, headers: nil).responseJSON { (response) in
if(response.error == nil){
LLog("请求成功")
LLog(response.result.value)
}else{
LLog("请求失败\(String(describing: response.error))")
}
}
打开相册上传图片和视频
import UIKit
import AVFoundation
import MobileCoreServices
import AssetsLibrary
import AVKit
import Alamofire
import MediaPlayer
class ViewController: UIViewController,UIImagePickerControllerDelegate, UINavigationControllerDelegate {
var flag = ""
let uploadURL = "https://www.hellomiao.cn/hellomiao/upload.php"
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func uploadImage(_ sender: Any) {
photoLib()
}
@IBAction func uploadVideo(_ sender: Any) {
videoLib()
}
func photoLib(){
flag = "图片"
if UIImagePickerController.isSourceTypeAvailable(.photoLibrary){
let picker = UIImagePickerController()
picker.delegate = self
picker.sourceType = UIImagePickerControllerSourceType.photoLibrary
self.present(picker, animated: true, completion: {
() -> Void in
})
}else{
print("读取相册错误")
}
}
func videoLib(){
flag = "视频"
if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) {
let imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = .photoLibrary;
imagePicker.mediaTypes = [kUTTypeMovie as String]
imagePicker.allowsEditing = false
self.present(imagePicker, animated: true, completion: nil)
}
else {
print("读取相册错误")
}
}
func imagePickerController(_ picker: UIImagePickerController,didFinishPickingMediaWithInfo info: [String : Any]) {
if flag == "视频" {
let videoURL = info[UIImagePickerControllerMediaURL] as! URL
let pathString = videoURL.path
print("视频地址:\(pathString)")
self.dismiss(animated: true, completion: nil)
let outpath = NSHomeDirectory() + "/Documents/\(Date().timeIntervalSince1970).mp4"
self.transformMoive(inputPath: pathString, outputPath: outpath)
}else{
let pickedImage = info[UIImagePickerControllerOriginalImage] as! UIImage
guard let jpegData = UIImageJPEGRepresentation(pickedImage, 0.5) else {
return
}
self.uploadImage(imageData: jpegData)
self.dismiss(animated: true, completion:nil)
}
}
func uploadImage(imageData : Data){
Alamofire.upload(
multipartFormData: { multipartFormData in
multipartFormData.append(imageData, withName: "file", fileName: "123456.jpg", mimeType: "image/jpeg")
},to: uploadURL,encodingCompletion: { encodingResult in
switch encodingResult {
case .success(let upload, _, _):
upload.responseJSON { response in
guard let result = response.result.value else { return }
print("json:\(result)")
}
upload.uploadProgress(queue: DispatchQueue.global(qos: .utility)) { progress in
print("图片上传进度: \(progress.fractionCompleted)")
}
case .failure(let encodingError):
print(encodingError)
}
})
}
func uploadVideo(mp4Path : URL){
Alamofire.upload(
multipartFormData: { multipartFormData in
multipartFormData.append(mp4Path, withName: "file", fileName: "123456.mp4", mimeType: "video/mp4")
},to: uploadURL,encodingCompletion: { encodingResult in
switch encodingResult {
case .success(let upload, _, _):
upload.responseJSON { response in
guard let result = response.result.value else { return }
print("json:\(result)")
}
upload.uploadProgress(queue: DispatchQueue.global(qos: .utility)) { progress in
print("视频上传进度: \(progress.fractionCompleted)")
}
case .failure(let encodingError):
print(encodingError)
}
})
}
func transformMoive(inputPath:String,outputPath:String){
let avAsset:AVURLAsset = AVURLAsset(url: URL.init(fileURLWithPath: inputPath), options: nil)
let assetTime = avAsset.duration
let duration = CMTimeGetSeconds(assetTime)
print("视频时长 \(duration)");
let compatiblePresets = AVAssetExportSession.exportPresets(compatibleWith: avAsset)
if compatiblePresets.contains(AVAssetExportPresetLowQuality) {
let exportSession:AVAssetExportSession = AVAssetExportSession.init(asset: avAsset, presetName: AVAssetExportPresetMediumQuality)!
let existBool = FileManager.default.fileExists(atPath: outputPath)
if existBool {
}
exportSession.outputURL = URL.init(fileURLWithPath: outputPath)
exportSession.outputFileType = AVFileTypeMPEG4
exportSession.shouldOptimizeForNetworkUse = true;
exportSession.exportAsynchronously(completionHandler: {
switch exportSession.status{
case .failed:
print("失败...\(String(describing: exportSession.error?.localizedDescription))")
break
case .cancelled:
print("取消")
break;
case .completed:
print("转码成功")
let mp4Path = URL.init(fileURLWithPath: outputPath)
self.uploadVideo(mp4Path: mp4Path)
break;
default:
print("..")
break;
}
})
}
}
}
断点下载
import UIKit
import Alamofire
class ViewController: UIViewController {
@IBOutlet weak var stopBtn: UIButton!
@IBOutlet weak var continueBtn: UIButton!
@IBOutlet weak var progress: UIProgressView!
var destination:DownloadRequest.DownloadFileDestination!
var cancelledData: Data?
var downloadRequest: DownloadRequest!
override func viewDidLoad() {
super.viewDidLoad()
self.destination = { _, response in
let documentsURL = FileManager.default.urls(for: .documentDirectory,
in: .userDomainMask)[0]
let fileURL = documentsURL.appendingPathComponent(response.suggestedFilename!)
return (fileURL, [.removePreviousFile, .createIntermediateDirectories])
}
self.downloadRequest = Alamofire.download(
"http://dldir1.qq.com/qqfile/qq/QQ7.9/16621/QQ7.9.exe", to: destination)
self.downloadRequest.downloadProgress(queue: DispatchQueue.main,
closure: downloadProgress)
self.downloadRequest.responseData(completionHandler: downloadResponse)
}
func downloadProgress(progress: Progress) {
self.progress.setProgress(Float(progress.fractionCompleted), animated:true)
print("当前进度:\(progress.fractionCompleted*100)%")
}
func downloadResponse(response: DownloadResponse<Data>) {
switch response.result {
case .success(let data):
print("文件下载完毕: \(response)")
case .failure:
self.cancelledData = response.resumeData
}
}
@IBAction func stopBtnClick(_ sender: AnyObject) {
self.downloadRequest?.cancel()
self.stopBtn.isEnabled = false
self.continueBtn.isEnabled = true
}
@IBAction func continueBtnClick(_ sender: AnyObject) {
if let cancelledData = self.cancelledData {
self.downloadRequest = Alamofire.download(resumingWith: cancelledData,
to: destination)
self.downloadRequest.downloadProgress(queue: DispatchQueue.main,
closure: downloadProgress)
self.downloadRequest.responseData(completionHandler: downloadResponse)
self.stopBtn.isEnabled = true
self.continueBtn.isEnabled = false
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
详细参考