Commit 08a31016 authored by David黄金龙's avatar David黄金龙

Merge branch 'youhua-dev' of http://gitlab.galaxy-immi.com/mobile-group/galaxy-iOS into youhua-dev

* 'youhua-dev' of http://gitlab.galaxy-immi.com/mobile-group/galaxy-iOS:
  OSS 封装及实现文件图片上传
parents 93972dfa 7dad47ca
...@@ -18,22 +18,38 @@ class YHBaseViewModel { ...@@ -18,22 +18,38 @@ class YHBaseViewModel {
YHHUD.flash(message: "\(Float(size/1024/1024))M") YHHUD.flash(message: "\(Float(size/1024/1024))M")
#endif #endif
let strUrl = YHBaseUrlManager.shared.curOssURL() + YHAllApiName.OSS.uploadApi // let strUrl = YHBaseUrlManager.shared.curOssURL() + YHAllApiName.OSS.uploadApi
let boundary = UUID().uuidString // let boundary = UUID().uuidString
let headers: HTTPHeaders = [ // let headers: HTTPHeaders = [
"Content-type": "multipart/form-data; boundary=\(boundary)", // "Content-type": "multipart/form-data; boundary=\(boundary)",
"businessCode": "4001001" // "businessCode": "4001001"
] // ]
let _ = YHNetRequest.uplaodRequest(url: strUrl, headers: headers, image: image) { [weak self] json, code in // let _ = YHNetRequest.uplaodRequest(url: strUrl, headers: headers, image: image) { [weak self] json, code in
// guard let _ = self else { return }
// if json.code == 200 {
// callBackBlock(json.data as? String, nil)
// } else {
// let error : YHErrorModel = YHErrorModel(errorCode:Int32(json.code), errorMsg: json.msg)
// callBackBlock(nil, error)
// }
// } failBlock: { err in
// callBackBlock(nil, err)
// }
if YHNetworkStatusManager.shared.isNetWorkOK == false {
DispatchQueue.main.async {
YHHUD.flash(message: "网络异常")
let errorModel = YHErrorModel(errorCode: 0, errorMsg: "网络异常")
callBackBlock(nil, errorModel)
return
}
return
}
YHOSSManager.share.putObject(image: image) {[weak self] success, error in
guard let _ = self else { return } guard let _ = self else { return }
if json.code == 200 { DispatchQueue.main.async {
callBackBlock(json.data as? String, nil) // 在这里执行需要在主线程上完成的任务
} else { callBackBlock(success, error)
let error : YHErrorModel = YHErrorModel(errorCode:Int32(json.code), errorMsg: json.msg)
callBackBlock(nil, error)
} }
} failBlock: { err in
callBackBlock(nil, err)
} }
} }
...@@ -75,23 +91,39 @@ class YHBaseViewModel { ...@@ -75,23 +91,39 @@ class YHBaseViewModel {
// 上传方法 // 上传方法
func uploadFile(_ url: String, callBackBlock:@escaping (_ success: String?, _ error:YHErrorModel?)->()) { func uploadFile(_ url: String, callBackBlock:@escaping (_ success: String?, _ error:YHErrorModel?)->()) {
let strUrl = YHBaseUrlManager.shared.curOssURL() + YHAllApiName.OSS.uploadApi // let strUrl = YHBaseUrlManager.shared.curOssURL() + YHAllApiName.OSS.uploadApi
printLog("\(url)") // printLog("\(url)")
let boundary = UUID().uuidString // let boundary = UUID().uuidString
let headers: HTTPHeaders = [ // let headers: HTTPHeaders = [
"Content-type": "multipart/form-data; boundary=\(boundary)", // "Content-type": "multipart/form-data; boundary=\(boundary)",
"businessCode": "4001001" // "businessCode": "4001001"
] // ]
let _ = YHNetRequest.uplaodFileRequest(url: strUrl, headers: headers, fileUrl: url) { [weak self] json, code in // let _ = YHNetRequest.uplaodFileRequest(url: strUrl, headers: headers, fileUrl: url) { [weak self] json, code in
guard let self = self else { return } // guard let self = self else { return }
if json.code == 200 { // if json.code == 200 {
callBackBlock(json.data as? String, nil) // callBackBlock(json.data as? String, nil)
} else { // } else {
let error : YHErrorModel = YHErrorModel(errorCode:Int32(json.code), errorMsg: json.msg) // let error : YHErrorModel = YHErrorModel(errorCode:Int32(json.code), errorMsg: json.msg)
callBackBlock(nil, error) // callBackBlock(nil, error)
// }
// } failBlock: { err in
// callBackBlock(nil, err)
// }
if YHNetworkStatusManager.shared.isNetWorkOK == false {
DispatchQueue.main.async {
YHHUD.flash(message: "网络异常")
let errorModel = YHErrorModel(errorCode: 0, errorMsg: "网络异常")
callBackBlock(nil, errorModel)
return
} }
} failBlock: { err in return
callBackBlock(nil, err)
} }
YHOSSManager.share.putFile(file: url, callBackBlock: {[weak self] success, error in
guard let _ = self else { return }
DispatchQueue.main.async {
// 在这里执行需要在主线程上完成的任务
callBackBlock(success, error)
}
})
} }
} }
...@@ -44,6 +44,8 @@ class YHHomePageViewController: YHBaseViewController { ...@@ -44,6 +44,8 @@ class YHHomePageViewController: YHBaseViewController {
override func viewWillAppear(_ animated: Bool) { override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated) super.viewWillAppear(animated)
requestAppNewVersion() requestAppNewVersion()
//获取OSS密钥
YHOSSManager.share.getOSSID()
} }
lazy var searchView: YHHomeSearchView = { lazy var searchView: YHHomeSearchView = {
...@@ -72,7 +74,6 @@ private extension YHHomePageViewController { ...@@ -72,7 +74,6 @@ private extension YHHomePageViewController {
homeHeaderView.homeBannerView.dataArr = [YHBannerModel.localDefaultItem()] homeHeaderView.homeBannerView.dataArr = [YHBannerModel.localDefaultItem()]
loadFirstData() loadFirstData()
getHomeBannerData() getHomeBannerData()
} }
func getHomeBannerData() { func getHomeBannerData() {
......
...@@ -190,6 +190,7 @@ class YHAllApiName { ...@@ -190,6 +190,7 @@ class YHAllApiName {
static let uploadApi = "oss/upload/storage" static let uploadApi = "oss/upload/storage"
static let getPublicApi = "oss/storage/convertToPublicURL" static let getPublicApi = "oss/storage/convertToPublicURL"
static let getPublicUrlsApi = "oss/storage/batchConvertToPublicURL" static let getPublicUrlsApi = "oss/storage/batchConvertToPublicURL"
static let getID = "ossv2/sts/auth"
} }
//我的签字 //我的签字
......
...@@ -92,6 +92,8 @@ class YHNetRequest: NSObject { ...@@ -92,6 +92,8 @@ class YHNetRequest: NSObject {
requestHeader.add(name:"app_version",value:version) requestHeader.add(name:"app_version",value:version)
requestHeader.add(name:"pass",value:"") requestHeader.add(name:"pass",value:"")
requestHeader.add(name:"businessCode",value:"4001001")
let appkey = "958364f87222c200a72414f492bf0e26" let appkey = "958364f87222c200a72414f492bf0e26"
let signOrgiString = "appid=" + "1" + "&" + "timestamp=" + dateStr + "&" + "appkey=" + appkey let signOrgiString = "appid=" + "1" + "&" + "timestamp=" + dateStr + "&" + "appkey=" + appkey
let sign = signOrgiString.md5() let sign = signOrgiString.md5()
......
...@@ -26,454 +26,92 @@ extension NSError : YHError { ...@@ -26,454 +26,92 @@ extension NSError : YHError {
public var _userInfo: AnyObject? { return userInfo as NSDictionary } public var _userInfo: AnyObject? { return userInfo as NSDictionary }
} }
class YHOSSDefine { class YHOSSModel: YHBaseModel {
static let OSS_ACCESSKEY_ID: String = "access_key_id" var bucket: String = ""
static let OSS_SECRETKEY_ID: String = "access_key_secret" var Expiration: String = ""
static let OSS_BUCKET_PUBLIC: String = "public-bucket" var bucketPath: String = ""
static let OSS_BUCKET_PRIVATE: String = "private-bucket" var accessKeyId: String = ""
static let OSS_ENDPOINT: String = "http://oss-cn-region.aliyuncs.com" var accessKeySecret: String = ""
static let OSS_MULTIPART_UPLOADKEY: String = "multipart" var endpoint: String = ""
static let OSS_RESUMABLE_UPLOADKEY: String = "resumable" var securityToken: String = ""
static let OSS_CALLBACK_URL: String = "http://oss-demo.aliyuncs.com:23450"
static let OSS_CNAME_URL: String = "http://www.cnametest.com/"
static let OSS_STSTOKEN_URL: String = "http://*.*.*.*.****/sts/getsts"
static let OSS_IMAGE_KEY: String = "testImage.png"
static let OSS_CRC64_ENABLE: Bool = true
static let OSS_CONTENT_TYPE: String = "Content-Type"
static let OSS_CONTENT_LENGTH: String = "Content-Length"
static let OSS_TEST_CONTENT_TYPE: String = "application/special"
static let OSS_APPEND_OBJECT_KEY: String = "appendObject"
static let SCHEME = "https://"
static let ENDPOINT = "oss-cn-hangzhou.aliyuncs.com"
static let CNAME_ENDPOINT = "oss.custom.com"
static let IP_ENDPOINT = "192.168.1.1:8080"
static let BUCKET_NAME = "BucketName"
static let OBJECT_KEY = "ObjectKey"
} }
class YHOSSManager: NSObject, URLSessionDelegate { class YHOSSManager: NSObject, URLSessionDelegate {
static let share = YHOSSManager() static let share = YHOSSManager()
var mProvider: OSSAuthCredentialProvider! var model: YHOSSModel = YHOSSModel()
var mProvider: OSSStsTokenCredentialProvider!
var mClient: OSSClient! var mClient: OSSClient!
var fileName: String = ""
override init() { override init() {
mProvider = OSSAuthCredentialProvider(authServerUrl: YHOSSDefine.OSS_STSTOKEN_URL)
mClient = OSSClient(endpoint: YHOSSDefine.OSS_ENDPOINT, credentialProvider: mProvider)
}
func getObject() {
let getObjectReq: OSSGetObjectRequest = OSSGetObjectRequest()
getObjectReq.bucketName = YHOSSDefine.OSS_BUCKET_PRIVATE
getObjectReq.objectKey = YHOSSDefine.OSS_IMAGE_KEY
getObjectReq.downloadProgress = { (bytesWritten: Int64,totalBytesWritten : Int64, totalBytesExpectedToWrite: Int64) -> Void in
printLog("bytesWritten:\(bytesWritten),totalBytesWritten:\(totalBytesWritten),totalBytesExpectedToWrite:\(totalBytesExpectedToWrite)")
};
let task: OSSTask = mClient.getObject(getObjectReq);
task.continue({(t) -> OSSTask<AnyObject>? in
self.showResult(task: t)
return nil
})
task.waitUntilFinished()
printLog("Error:\(String(describing: task.error))")
}
func getImage() {
let getObjectReq: OSSGetObjectRequest = OSSGetObjectRequest()
getObjectReq.bucketName = YHOSSDefine.OSS_BUCKET_PRIVATE
getObjectReq.objectKey = "ImageKey"
getObjectReq.xOssProcess = "image/resize,m_lfit,w_100,h_100"
getObjectReq.downloadProgress = { (bytesWritten: Int64,totalBytesWritten : Int64, totalBytesExpectedToWrite: Int64) -> Void in
printLog("bytesWritten:\(bytesWritten),totalBytesWritten:\(totalBytesWritten),totalBytesExpectedToWrite:\(totalBytesExpectedToWrite)")
};
let task: OSSTask = mClient.getObject(getObjectReq);
task.continue({(t) -> OSSTask<AnyObject>? in
self.showResult(task: t)
return nil
})
task.waitUntilFinished()
printLog("Error:\(String(describing: task.error))")
}
func getStsToken() {
let tcs = OSSTaskCompletionSource<AnyObject>()
let federationProvider: OSSFederationCredentialProvider = OSSFederationCredentialProvider(federationTokenGetter: {() ->OSSFederationToken? in
let url: URL = URL(string: YHOSSDefine.OSS_STSTOKEN_URL)!
let config: URLSessionConfiguration = URLSessionConfiguration.default
let session: URLSession = URLSession(configuration: config, delegate: self as URLSessionDelegate, delegateQueue: nil)
let task = session.dataTask(with: url, completionHandler: { (data, response, error) -> Void in
//Convert Data to Jsons
tcs.setResult(data as AnyObject)
})
task.resume()
tcs.task.waitUntilFinished()
let json = try? JSONSerialization.jsonObject(with: tcs.task.result as! Data,
options:.allowFragments) as? [String: Any]
print("Json Object:", json as Any)
//verify json
let accessKeyId = json?["AccessKeyId"]
let accessKeySecret = json?["AccessKeySecret"]
self.ossAlert(title: "notice", message: json?.description)
let token = OSSFederationToken()
token.tAccessKey = accessKeyId as! String
token.tSecretKey = accessKeySecret as! String
return token
})
do {
try federationProvider.getToken()
} catch{
print("get Error")
}
} }
func headObject() { func getOSSID() {
let objectKey = "key" let strUrl = YHBaseUrlManager.shared.curOssURL() + YHAllApiName.OSS.getID
if objectKey.isEmpty { let _ = YHNetRequest.getRequest(url: strUrl) { [weak self] json, code in
ossAlert(title: nil, message: "objectKey can not be empty!") //1. json字符串 转 对象
} guard let self = self else { return }
let dic = json.data
let request = OSSHeadObjectRequest() guard let resultModel = YHOSSModel.deserialize(from: dic as? Dictionary) else {
request.bucketName = YHOSSDefine.OSS_BUCKET_PRIVATE return
request.objectKey = objectKey
let task: OSSTask = mClient.headObject(request)
task.continue({(task) -> OSSTask<AnyObject>? in
self.showResult(task: task)
return nil
})
task.waitUntilFinished()
}
func getBucket() {
let request = OSSGetBucketRequest()
request.bucketName = YHOSSDefine.OSS_BUCKET_PRIVATE
let task = mClient.getBucket(request)
task.continue( { (t) -> Any? in
if let result = t.result as? OSSGetBucketResult {
self.showResult(task: OSSTask(result: result.contents as AnyObject))
} else {
self.showResult(task: t)
} }
return nil self.model = resultModel
}) self.mProvider = OSSStsTokenCredentialProvider(accessKeyId: self.model.accessKeyId, secretKeyId: self.model.accessKeySecret, securityToken: self.model.securityToken)
} self.mClient = OSSClient(endpoint: self.model.endpoint, credentialProvider: self.mProvider)
} failBlock: { err in
func getBucketACL() -> Void {
let request = OSSGetBucketACLRequest()
request.bucketName = YHOSSDefine.OSS_BUCKET_PRIVATE
let task = mClient.getBucketACL(request)
task.continue( { (t) -> Any? in
if let result = t.result as? OSSGetBucketACLResult {
self.showResult(task: OSSTask(result: result.aclGranted as AnyObject))
} else {
self.showResult(task: t)
}
return nil
})
}
func createBucket() -> Void {
let request = OSSCreateBucketRequest()
request.bucketName = "com-dhc-test"
let task = mClient.createBucket(request)
task.continue( { (t) -> Any? in
self.showResult(task: t)
return nil
})
}
func deleteBucket() -> Void {
let request = OSSDeleteBucketRequest()
request.bucketName = "com-dhc-test"
let task = mClient.deleteBucket(request)
task.continue( { (t) -> Any? in
self.showResult(task: t)
return nil
})
}
func putObject(image: UIImage) {
let request = OSSPutObjectRequest()
request.uploadingData = image.pngData()!
request.bucketName = YHOSSDefine.OSS_BUCKET_PRIVATE
request.objectKey = "landscape-painting.jpeg"
request.uploadProgress = { (bytesSent: Int64, totalBytesSent: Int64, totalBytesExpectedToSend: Int64) -> Void in
printLog("bytesSent:\(bytesSent),totalBytesSent:\(totalBytesSent),totalBytesExpectedToSend:\(totalBytesExpectedToSend)")
};
let provider = OSSFederationTokenCredentialProvider {
let tcs = TaskCompletionSource()
DispatchQueue(label: "test").async {
Thread.sleep(forTimeInterval: 10)
let token = OSSFederationToken()
token.tAccessKey = "STS.tAccessKey"
token.tSecretKey = "tSecretKey"
token.tToken = "tToken"
token.expirationTimeInGMTFormat = "2023-05-23T07:34:27Z"
// or tcs.trySetError(<#T##error: Error##Error#>)
tcs.trySetResult(token)
}
tcs.wait(timeout: 5)
if let error = tcs.task.error {
let nsError = error as NSError
if nsError.code == OSSClientErrorCODE.codeNotKnown.rawValue,
let errorMessage = nsError.userInfo[OSSErrorMessageTOKEN] as? String,
errorMessage == "TaskCompletionSource wait timeout." {
// 超时错误
}
throw error
} else if let result = tcs.task.result as? OSSFederationToken {
return result
}
throw NSError(domain: OSSClientErrorDomain,
code: OSSClientErrorCODE.codeSignFailed.rawValue,
userInfo: [OSSErrorMessageTOKEN : "Can not get FederationToken."])
} }
let client = OSSClient(endpoint: YHOSSDefine.OSS_ENDPOINT, credentialProvider: provider)
let task = client.putObject(request)
task.continue({ (t) -> Any? in
self.showResult(task: t)
}).waitUntilFinished()
} }
func multipartUpload() { func putObject(image: UIImage, callBackBlock:@escaping (_ success: String?, _ error:YHErrorModel?)->()) {
let request = OSSMultipartUploadRequest() let request = OSSPutObjectRequest()
request.uploadingFileURL = Bundle.main.url(forResource: "wangwang", withExtension: "zip")! let size = Int(5 * 1024 * 1024)
request.bucketName = YHOSSDefine.OSS_BUCKET_PRIVATE guard let imageData = image.compressOriginalImage(size) else { return }
request.objectKey = "wangwang(swift).zip" request.uploadingData = imageData
request.partSize = 102400; request.bucketName = self.model.bucket
let timestamp = Date().timeIntervalSince1970
self.fileName = "\(UInt64(timestamp))" + ".jpg"
request.objectKey = self.model.bucketPath + "/" + "\(self.fileName)"
request.uploadProgress = { (bytesSent: Int64, totalBytesSent: Int64, totalBytesExpectedToSend: Int64) -> Void in request.uploadProgress = { (bytesSent: Int64, totalBytesSent: Int64, totalBytesExpectedToSend: Int64) -> Void in
printLog("bytesSent:\(bytesSent),totalBytesSent:\(totalBytesSent),totalBytesExpectedToSend:\(totalBytesExpectedToSend)") printLog("bytesSent:\(bytesSent),totalBytesSent:\(totalBytesSent),totalBytesExpectedToSend:\(totalBytesExpectedToSend)")
}; };
let provider = OSSAuthCredentialProvider(authServerUrl: YHOSSDefine.OSS_STSTOKEN_URL) let task = self.mClient.putObject(request)
let client = OSSClient(endpoint: YHOSSDefine.OSS_ENDPOINT, credentialProvider: provider)
let task = client.multipartUpload(request)
task.continue({ (t) -> Any? in task.continue({ (t) -> Any? in
self.showResult(task: t) let result = t
}).waitUntilFinished() if (result.error != nil) {
} callBackBlock(nil, YHErrorModel())
} else {
func sequentialMultipartUpload() { let string = "https://" + self.model.bucket + "." + "oss-cn-shenzhen.aliyuncs.com/" + self.model.bucketPath + "/" + self.fileName
let request = OSSResumableUploadRequest() callBackBlock(string, YHErrorModel())
request.bucketName = YHOSSDefine.OSS_BUCKET_PRIVATE;
request.objectKey = "sequential-swift-multipart"
request.uploadingFileURL = Bundle.main.url(forResource: "wangwang", withExtension: "zip")!
request.deleteUploadIdOnCancelling = false
request.crcFlag = OSSRequestCRCFlag.open
let filePath = Bundle.main.path(forResource: "wangwang", ofType: "zip")
request.contentSHA1 = OSSUtil.sha1(withFilePath: filePath)
let task = mClient.sequentialMultipartUpload(request)
task.continue({ (t) -> Any? in
self.showResult(task: t)
return nil
}).waitUntilFinished()
}
func resumableUpload() {
var request = OSSResumableUploadRequest()
request.uploadingFileURL = Bundle.main.url(forResource: "wangwang", withExtension: "zip")!
request.bucketName = YHOSSDefine.OSS_BUCKET_PRIVATE
request.deleteUploadIdOnCancelling = false
request.objectKey = "wangwang(swift).zip"
let cacheDir = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.cachesDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).first
request.recordDirectoryPath = cacheDir!
request.partSize = 102400
request.uploadProgress = { (bytesSent: Int64, totalBytesSent: Int64, totalBytesExpectedToSend: Int64) -> Void in
printLog("bytesSent:\(bytesSent),totalBytesSent:\(totalBytesSent),totalBytesExpectedToSend:\(totalBytesExpectedToSend)")
if totalBytesSent > (totalBytesExpectedToSend / 2) {
request.cancel()
} }
} return
var task = mClient.resumableUpload(request)
task.continue({ (t) -> Any? in
print("Error: \(String(describing: t.error))")
return nil
}).waitUntilFinished()
request = OSSResumableUploadRequest()
request.uploadingFileURL = Bundle.main.url(forResource: "wangwang", withExtension: "zip")!
request.bucketName = YHOSSDefine.OSS_BUCKET_PRIVATE
request.objectKey = "wangwang(swift).zip"
request.partSize = 102400;
request.deleteUploadIdOnCancelling = false
request.recordDirectoryPath = cacheDir!
request.uploadProgress = { (bytesSent: Int64, totalBytesSent: Int64, totalBytesExpectedToSend: Int64) -> Void in
printLog("bytesSent:\(bytesSent),totalBytesSent:\(totalBytesSent),totalBytesExpectedToSend:\(totalBytesExpectedToSend)")
}
task = mClient.resumableUpload(request)
task.continue({ (t) -> Any? in
self.showResult(task: t)
return nil
}).waitUntilFinished() }).waitUntilFinished()
} }
func putObjectWithXML() { func putFile(file: String, callBackBlock:@escaping (_ success: String?, _ error:YHErrorModel?)->()) {
let request = OSSPutObjectRequest() let request = OSSPutObjectRequest()
request.uploadingFileURL = Bundle.main.url(forResource: "test", withExtension: "xml")! guard let fileData = try? Data(contentsOf: URL(string: file) ?? URL(fileURLWithPath: "")) else { return }
request.bucketName = YHOSSDefine.OSS_BUCKET_PRIVATE let fileExtension = URL(fileURLWithPath: file).pathExtension.lowercased()
request.objectKey = "test.xml" request.uploadingData = fileData
request.contentSHA1 = OSSUtil.sha1(withFilePath: Bundle.main.path(forResource: "test", ofType: "xml")) request.bucketName = self.model.bucket
let timestamp = Date().timeIntervalSince1970
self.fileName = "\(UInt64(timestamp))" + ".\(fileExtension)"
request.objectKey = self.model.bucketPath + "/" + "\(self.fileName)"
request.uploadProgress = { (bytesSent: Int64, totalBytesSent: Int64, totalBytesExpectedToSend: Int64) -> Void in request.uploadProgress = { (bytesSent: Int64, totalBytesSent: Int64, totalBytesExpectedToSend: Int64) -> Void in
print("bytesSent:\(bytesSent),totalBytesSent:\(totalBytesSent),totalBytesExpectedToSend:\(totalBytesExpectedToSend)"); printLog("bytesSent:\(bytesSent),totalBytesSent:\(totalBytesSent),totalBytesExpectedToSend:\(totalBytesExpectedToSend)")
}; };
let task = mClient.putObject(request) let task = self.mClient.putObject(request)
task.continue({ (t) -> Any? in task.continue({ (t) -> Any? in
self.showResult(task: t) let result = t
}).waitUntilFinished() if (result.error != nil) {
} let error: NSError = (task.error)! as NSError
let result = error.description
func getObjectACL() { callBackBlock(nil, YHErrorModel())
let request = OSSGetObjectACLRequest()
request.bucketName = YHOSSDefine.OSS_BUCKET_PRIVATE
request.objectName = YHOSSDefine.OSS_IMAGE_KEY
let task = mClient.getObjectACL(request)
task.continue({ (t) -> Any? in
self.showResult(task: t)
return nil
}).waitUntilFinished()
}
func deleteMultipleObjects() {
let request = OSSDeleteMultipleObjectsRequest()
request.bucketName = YHOSSDefine.OSS_BUCKET_PRIVATE
request.keys = ["testFor5m"]
request.quiet = false
request.encodingType = "url"
let task = mClient.deleteMultipleObjects(request)
task.continue({ (t) -> Any? in
self.showResult(task: t)
return nil
}).waitUntilFinished()
}
func triggerCallBack() {
let provider = OSSPlainTextAKSKPairCredentialProvider.init(plainTextAccessKey: "AK", secretKey: "SK")
let pClient = OSSClient.init(endpoint: YHOSSDefine.OSS_ENDPOINT, credentialProvider: provider)
let request = OSSCallBackRequest()
request.bucketName = YHOSSDefine.OSS_BUCKET_PRIVATE
request.objectName = "file1m"
request.callbackVar = ["key1": "value1",
"key2": "value2"]
request.callbackParam = ["callbackUrl": YHOSSDefine.OSS_CALLBACK_URL,
"callbackBody": "test"]
let task = pClient.triggerCallBack(request)
task.continue({ (t) -> Any? in
if (t.result != nil) {
let result = t.result as! OSSCallBackResult;
self .ossAlert(title: "提示", message: result.serverReturnJsonString);
}
return nil
}).waitUntilFinished()
}
//验证结果
func showResult(task: OSSTask<AnyObject>?) {
if (task?.error != nil) {
let error: NSError = (task?.error)! as NSError
self.ossAlert(title: "error", message: error.description)
} else {
let result = task?.result
self.ossAlert(title: "notice", message: result?.description)
}
}
func ossAlert(title: String?,message:String?) {
DispatchQueue.main.async {
let alertCtrl = UIAlertController(title: title, message: message, preferredStyle: UIAlertController.Style.alert)
alertCtrl.addAction(UIAlertAction(title: "confirm", style: UIAlertAction.Style.default, handler: { (action) in
print("\(action.title!) has been clicked");
alertCtrl.dismiss(animated: true, completion: nil)
}))
UIViewController.current?.present(alertCtrl, animated: true, completion: nil)
}
}
}
public class OSSFederationTokenCredentialProvider: OSSFederationCredentialProvider {
var token: OSSFederationToken?
private var tokenGetter: () throws -> OSSFederationToken
public init(tokenGetter: @escaping () throws -> OSSFederationToken) {
self.tokenGetter = tokenGetter
super.init()
}
public override func getToken() throws -> OSSFederationToken {
do {
if var token = token {
if let expirationTimeInGMTFormat = token.expirationTimeInGMTFormat {
let dateFormatter = DateFormatter()
dateFormatter.timeZone = TimeZone(identifier: "GMT")
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
if let data = dateFormatter.date(from: expirationTimeInGMTFormat) {
token.expirationTimeInMilliSecond = Int64(data.timeIntervalSince1970 * 1000)
}
}
let expirationDate = Date(timeIntervalSince1970: TimeInterval(token.expirationTimeInMilliSecond / 1000))
let interval = expirationDate.timeIntervalSince(NSDate.oss_clockSkewFixed())
if interval < 5 * 60 {
token = try self.tokenGetter()
self.token = token
}
return token
} else { } else {
let token = try self.tokenGetter() let string = "https://" + self.model.bucket + "." + "oss-cn-shenzhen.aliyuncs.com/" + self.model.bucketPath + "/" + self.fileName
self.token = token callBackBlock(string, YHErrorModel())
return token
} }
} catch { return
throw NSError(domain: OSSClientErrorDomain, }).waitUntilFinished()
code: OSSClientErrorCODE.codeSignFailed.rawValue,
userInfo: [OSSErrorMessageTOKEN : error])
}
}
}
public class TaskCompletionSource: OSSTaskCompletionSource<AnyObject> {
public func wait(timeout: TimeInterval) {
let timer = DispatchSource.makeTimerSource()
timer.schedule(deadline: .now() + timeout)
timer.setEventHandler {
if !self.task.isCompleted {
let error = NSError(domain: OSSClientErrorDomain,
code: OSSClientErrorCODE.codeNotKnown.rawValue,
userInfo: [OSSErrorMessageTOKEN : "TaskCompletionSource wait timeout."])
self.trySetError(error)
}
}
timer.resume()
task.waitUntilFinished()
timer.cancel()
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment