Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
galaxy-iOS
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
mobile-group
galaxy-iOS
Commits
b073687d
Commit
b073687d
authored
May 16, 2024
by
pete谢兆麟
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
阿里云OOS
parent
37df3c67
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
493 additions
and
2 deletions
+493
-2
Podfile
galaxy/Podfile
+2
-2
project.pbxproj
galaxy/galaxy.xcodeproj/project.pbxproj
+12
-0
YHOSSManager.swift
galaxy/galaxy/Classes/Tools/Upload/YHOSSManager.swift
+479
-0
No files found.
galaxy/Podfile
View file @
b073687d
...
@@ -65,8 +65,8 @@ target 'galaxy' do
...
@@ -65,8 +65,8 @@ target 'galaxy' do
pod
'JXSegmentedView'
,
'1.3.0'
pod
'JXSegmentedView'
,
'1.3.0'
#UI调试组件
#UI调试组件
pod
'LookinServer'
,
'1.2.6'
,
:subspecs
=>
[
'Swift'
],
:configurations
=>
[
'Debug'
]
pod
'LookinServer'
,
'1.2.6'
,
:subspecs
=>
[
'Swift'
],
:configurations
=>
[
'Debug'
]
#
#阿里云OOS
#阿里云OOS
#
pod 'AliyunOSSiOS','2.10.18'
pod
'AliyunOSSiOS'
,
'2.10.18'
#极光推送
#极光推送
pod
'JPush'
,
'5.2.0'
pod
'JPush'
,
'5.2.0'
pod
'JCore'
,
'4.6.0-noidfa'
pod
'JCore'
,
'4.6.0-noidfa'
...
...
galaxy/galaxy.xcodeproj/project.pbxproj
View file @
b073687d
...
@@ -236,6 +236,7 @@
...
@@ -236,6 +236,7 @@
048787D52BCE880B0036E221
/* YHServiceOrderListViewController.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
048787D42BCE880B0036E221
/* YHServiceOrderListViewController.swift */
;
};
048787D52BCE880B0036E221
/* YHServiceOrderListViewController.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
048787D42BCE880B0036E221
/* YHServiceOrderListViewController.swift */
;
};
048787D72BCE96F50036E221
/* YHServiceOrderProgressTableViewCell.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
048787D62BCE96F50036E221
/* YHServiceOrderProgressTableViewCell.swift */
;
};
048787D72BCE96F50036E221
/* YHServiceOrderProgressTableViewCell.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
048787D62BCE96F50036E221
/* YHServiceOrderProgressTableViewCell.swift */
;
};
048787D92BCF68530036E221
/* YHProgressView.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
048787D82BCF68530036E221
/* YHProgressView.swift */
;
};
048787D92BCF68530036E221
/* YHProgressView.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
048787D82BCF68530036E221
/* YHProgressView.swift */
;
};
0488518F2BF5FD1500C4E32D
/* YHOSSManager.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
0488518E2BF5FD1500C4E32D
/* YHOSSManager.swift */
;
};
048B2A4A2BC7D9DC00A93BF0
/* YHMyLikeViewController.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
048B2A492BC7D9DC00A93BF0
/* YHMyLikeViewController.swift */
;
};
048B2A4A2BC7D9DC00A93BF0
/* YHMyLikeViewController.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
048B2A492BC7D9DC00A93BF0
/* YHMyLikeViewController.swift */
;
};
048B2A4D2BC7DAE800A93BF0
/* YHMyLikeViewModel.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
048B2A4C2BC7DAE800A93BF0
/* YHMyLikeViewModel.swift */
;
};
048B2A4D2BC7DAE800A93BF0
/* YHMyLikeViewModel.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
048B2A4C2BC7DAE800A93BF0
/* YHMyLikeViewModel.swift */
;
};
0493B3DC2BA7EFE600AF9393
/* YHCertificateSearchViewController.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
0493B3DB2BA7EFE600AF9393
/* YHCertificateSearchViewController.swift */
;
};
0493B3DC2BA7EFE600AF9393
/* YHCertificateSearchViewController.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
0493B3DB2BA7EFE600AF9393
/* YHCertificateSearchViewController.swift */
;
};
...
@@ -692,6 +693,7 @@
...
@@ -692,6 +693,7 @@
048787D42BCE880B0036E221
/* YHServiceOrderListViewController.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
YHServiceOrderListViewController.swift
;
sourceTree
=
"<group>"
;
};
048787D42BCE880B0036E221
/* YHServiceOrderListViewController.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
YHServiceOrderListViewController.swift
;
sourceTree
=
"<group>"
;
};
048787D62BCE96F50036E221
/* YHServiceOrderProgressTableViewCell.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
YHServiceOrderProgressTableViewCell.swift
;
sourceTree
=
"<group>"
;
};
048787D62BCE96F50036E221
/* YHServiceOrderProgressTableViewCell.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
YHServiceOrderProgressTableViewCell.swift
;
sourceTree
=
"<group>"
;
};
048787D82BCF68530036E221
/* YHProgressView.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
YHProgressView.swift
;
sourceTree
=
"<group>"
;
};
048787D82BCF68530036E221
/* YHProgressView.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
YHProgressView.swift
;
sourceTree
=
"<group>"
;
};
0488518E2BF5FD1500C4E32D
/* YHOSSManager.swift */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.swift
;
path
=
YHOSSManager.swift
;
sourceTree
=
"<group>"
;
};
048B2A492BC7D9DC00A93BF0
/* YHMyLikeViewController.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
YHMyLikeViewController.swift
;
sourceTree
=
"<group>"
;
};
048B2A492BC7D9DC00A93BF0
/* YHMyLikeViewController.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
YHMyLikeViewController.swift
;
sourceTree
=
"<group>"
;
};
048B2A4C2BC7DAE800A93BF0
/* YHMyLikeViewModel.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
YHMyLikeViewModel.swift
;
sourceTree
=
"<group>"
;
};
048B2A4C2BC7DAE800A93BF0
/* YHMyLikeViewModel.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
YHMyLikeViewModel.swift
;
sourceTree
=
"<group>"
;
};
0493B3DB2BA7EFE600AF9393
/* YHCertificateSearchViewController.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
YHCertificateSearchViewController.swift
;
sourceTree
=
"<group>"
;
};
0493B3DB2BA7EFE600AF9393
/* YHCertificateSearchViewController.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
YHCertificateSearchViewController.swift
;
sourceTree
=
"<group>"
;
};
...
@@ -1661,6 +1663,14 @@
...
@@ -1661,6 +1663,14 @@
path
=
Frameworks
;
path
=
Frameworks
;
sourceTree
=
"<group>"
;
sourceTree
=
"<group>"
;
};
};
0488518B2BF5FAA800C4E32D
/* Upload */
=
{
isa
=
PBXGroup
;
children
=
(
0488518E2BF5FD1500C4E32D
/* YHOSSManager.swift */
,
);
path
=
Upload
;
sourceTree
=
"<group>"
;
};
048B2A4B2BC7DACF00A93BF0
/* ViewModel */
=
{
048B2A4B2BC7DACF00A93BF0
/* ViewModel */
=
{
isa
=
PBXGroup
;
isa
=
PBXGroup
;
children
=
(
children
=
(
...
@@ -2116,6 +2126,7 @@
...
@@ -2116,6 +2126,7 @@
A5ACE8EE2B4564F7002C94D2
/* Tools */
=
{
A5ACE8EE2B4564F7002C94D2
/* Tools */
=
{
isa
=
PBXGroup
;
isa
=
PBXGroup
;
children
=
(
children
=
(
0488518B2BF5FAA800C4E32D
/* Upload */
,
04AF514C2BEB57FC00009E3A
/* VideoPlay */
,
04AF514C2BEB57FC00009E3A
/* VideoPlay */
,
0468D4292B55017400CFB916
/* Analytics */
,
0468D4292B55017400CFB916
/* Analytics */
,
04AF58BA2B4FB71C0066011A
/* Localized */
,
04AF58BA2B4FB71C0066011A
/* Localized */
,
...
@@ -2711,6 +2722,7 @@
...
@@ -2711,6 +2722,7 @@
A53B61192BB3C9960010B573
/* YHMyDocListHeaderView.swift in Sources */
,
A53B61192BB3C9960010B573
/* YHMyDocListHeaderView.swift in Sources */
,
A567E5B22BD7643D00D5D5A0
/* YHHomeBannerCollectionViewCell.swift in Sources */
,
A567E5B22BD7643D00D5D5A0
/* YHHomeBannerCollectionViewCell.swift in Sources */
,
045EEF082B9F171A0022A143
/* YHBasicInfoCellModel.swift in Sources */
,
045EEF082B9F171A0022A143
/* YHBasicInfoCellModel.swift in Sources */
,
0488518F2BF5FD1500C4E32D
/* YHOSSManager.swift in Sources */
,
A592FE952BA6D23C0062FACA
/* YHCertificateEntryCell.swift in Sources */
,
A592FE952BA6D23C0062FACA
/* YHCertificateEntryCell.swift in Sources */
,
A5ACE9472B4564F7002C94D2
/* YHHUD.swift in Sources */
,
A5ACE9472B4564F7002C94D2
/* YHHUD.swift in Sources */
,
A5ACE9412B4564F7002C94D2
/* Dictionary+Extension.swift in Sources */
,
A5ACE9412B4564F7002C94D2
/* Dictionary+Extension.swift in Sources */
,
...
...
galaxy/galaxy/Classes/Tools/Upload/YHOSSManager.swift
0 → 100644
View file @
b073687d
//
// YHOOSManager.swift
// galaxy
//
// Created by EDY on 2024/1/16.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import
UIKit
import
AliyunOSSiOS
public
protocol
YHError
{
var
_domain
:
String
{
get
}
var
_code
:
Int
{
get
}
var
_userInfo
:
AnyObject
?
{
get
}
}
extension
NSError
:
YHError
{
@nonobjc
public
var
_domain
:
String
{
return
domain
}
@nonobjc
public
var
_code
:
Int
{
return
code
}
@nonobjc
public
var
_userInfo
:
AnyObject
?
{
return
userInfo
as
NSDictionary
}
}
class
YHOSSDefine
{
static
let
OSS_ACCESSKEY_ID
:
String
=
"access_key_id"
static
let
OSS_SECRETKEY_ID
:
String
=
"access_key_secret"
static
let
OSS_BUCKET_PUBLIC
:
String
=
"public-bucket"
static
let
OSS_BUCKET_PRIVATE
:
String
=
"private-bucket"
static
let
OSS_ENDPOINT
:
String
=
"http://oss-cn-region.aliyuncs.com"
static
let
OSS_MULTIPART_UPLOADKEY
:
String
=
"multipart"
static
let
OSS_RESUMABLE_UPLOADKEY
:
String
=
"resumable"
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
{
static
let
share
=
YHOSSManager
()
var
mProvider
:
OSSAuthCredentialProvider
!
var
mClient
:
OSSClient
!
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
()
{
let
objectKey
=
"key"
if
objectKey
.
isEmpty
{
ossAlert
(
title
:
nil
,
message
:
"objectKey can not be empty!"
)
}
let
request
=
OSSHeadObjectRequest
()
request
.
bucketName
=
YHOSSDefine
.
OSS_BUCKET_PRIVATE
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
})
}
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
()
{
let
request
=
OSSMultipartUploadRequest
()
request
.
uploadingFileURL
=
Bundle
.
main
.
url
(
forResource
:
"wangwang"
,
withExtension
:
"zip"
)
!
request
.
bucketName
=
YHOSSDefine
.
OSS_BUCKET_PRIVATE
request
.
objectKey
=
"wangwang(swift).zip"
request
.
partSize
=
102400
;
request
.
uploadProgress
=
{
(
bytesSent
:
Int64
,
totalBytesSent
:
Int64
,
totalBytesExpectedToSend
:
Int64
)
->
Void
in
printLog
(
"bytesSent:
\(
bytesSent
)
,totalBytesSent:
\(
totalBytesSent
)
,totalBytesExpectedToSend:
\(
totalBytesExpectedToSend
)
"
)
};
let
provider
=
OSSAuthCredentialProvider
(
authServerUrl
:
YHOSSDefine
.
OSS_STSTOKEN_URL
)
let
client
=
OSSClient
(
endpoint
:
YHOSSDefine
.
OSS_ENDPOINT
,
credentialProvider
:
provider
)
let
task
=
client
.
multipartUpload
(
request
)
task
.
continue
({
(
t
)
->
Any
?
in
self
.
showResult
(
task
:
t
)
})
.
waitUntilFinished
()
}
func
sequentialMultipartUpload
()
{
let
request
=
OSSResumableUploadRequest
()
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
()
}
}
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
()
}
func
putObjectWithXML
()
{
let
request
=
OSSPutObjectRequest
()
request
.
uploadingFileURL
=
Bundle
.
main
.
url
(
forResource
:
"test"
,
withExtension
:
"xml"
)
!
request
.
bucketName
=
YHOSSDefine
.
OSS_BUCKET_PRIVATE
request
.
objectKey
=
"test.xml"
request
.
contentSHA1
=
OSSUtil
.
sha1
(
withFilePath
:
Bundle
.
main
.
path
(
forResource
:
"test"
,
ofType
:
"xml"
))
request
.
uploadProgress
=
{
(
bytesSent
:
Int64
,
totalBytesSent
:
Int64
,
totalBytesExpectedToSend
:
Int64
)
->
Void
in
print
(
"bytesSent:
\(
bytesSent
)
,totalBytesSent:
\(
totalBytesSent
)
,totalBytesExpectedToSend:
\(
totalBytesExpectedToSend
)
"
);
};
let
task
=
mClient
.
putObject
(
request
)
task
.
continue
({
(
t
)
->
Any
?
in
self
.
showResult
(
task
:
t
)
})
.
waitUntilFinished
()
}
func
getObjectACL
()
{
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
{
let
token
=
try
self
.
tokenGetter
()
self
.
token
=
token
return
token
}
}
catch
{
throw
NSError
(
domain
:
OSSClientErrorDomain
,
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
()
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment