Sources/OSS/ClientObjectMultipart.swift (170 lines of code) (raw):
import Foundation
public extension Client {
/// Initiates a multipart upload task.
/// - Parameters:
/// - request: The request parameter to send
/// - request: Optional, operation options
/// - Returns: The result instance.
func initiateMultipartUpload(
_ request: InitiateMultipartUploadRequest,
_ options: OperationOptions? = nil
) async throws -> InitiateMultipartUploadResult {
var input = OperationInput(
operationName: "InitiateMultipartUpload",
method: "POST",
parameters: [
"uploads": "",
]
)
input.bucket = try request.bucket.ensureRequired(field: "request.bucket")
input.key = try request.key.ensureRequired(field: "request.key")
var req = request
var customDeserializers: [SerdeSerializeDelegate] = [Serde.serializeInitiateMultipartUpload, Serde.addContentMd5]
if clientImpl.hasFeatureFlag(FeatureFlag.autoDetectMimeType) {
customDeserializers.append(Serde.addContentType)
} else {
// urlsession add Content-Type:application/x-www-form-urlencoded default
if req.contentType == nil {
req.contentType = "application/octet-stream"
}
}
try Serde.serializeInput(&req, &input, customDeserializers)
var output = try await clientImpl.execute(with: &input, args: options)
var result = InitiateMultipartUploadResult()
try Serde.deserializeOutput(&result, &output, [Serde.deserializeInitiateMultipartUpload])
return result
}
/// You can call this operation to upload an object by part based on the object name and the upload ID that you specify.
/// - Parameters:
/// - request: The request parameter to send
/// - request: Optional, operation options
/// - Returns: The result instance.
func uploadPart(
_ request: UploadPartRequest,
_ options: OperationOptions? = nil
) async throws -> UploadPartResult {
var input = OperationInput(
operationName: "UploadPart",
method: "PUT",
headers: [
"Content-Type": "application/xml",
]
)
input.bucket = try request.bucket.ensureRequired(field: "request.bucket")
input.key = try request.key.ensureRequired(field: "request.key")
try request.uploadId.ensureRequired(field: "request.uploadId")
try request.partNumber.ensureRequired(field: "request.partNumber")
if let progress = request.progress {
input.metadata.set(
key: AttributeKeys.progressDelegate,
value: ProgressDelegateDesc(delegate: ProgressWithRetry(progress), upload: true)
)
}
if clientImpl.hasFeatureFlag(FeatureFlag.enableCRC64CheckUpload) {
input.metadata.append(
key: AttributeKeys.responseHandler,
value: ChekerUploadCrcResponseHandler()
)
}
var req = request
try Serde.serializeInput(&req, &input, [Serde.serializeUploadPart, Serde.addContentMd5, Serde.addContentType])
var output = try await clientImpl.execute(with: &input, args: options)
var result = UploadPartResult()
try Serde.deserializeOutput(&result, &output, [Serde.deserializeUploadPart])
return result
}
/// You can call this operation to complete the multipart upload task of an object.
/// - Parameters:
/// - request: The request parameter to send
/// - request: Optional, operation options
/// - Returns: The result instance.
func completeMultipartUpload(
_ request: CompleteMultipartUploadRequest,
_ options: OperationOptions? = nil
) async throws -> CompleteMultipartUploadResult {
var input = OperationInput(
operationName: "CompleteMultipartUpload",
method: "POST",
headers: [
"Content-Type": "application/xml",
]
)
input.bucket = try request.bucket.ensureRequired(field: "request.bucket")
input.key = try request.key.ensureRequired(field: "request.key")
try request.uploadId.ensureRequired(field: "request.uploadId")
var req = request
try Serde.serializeInput(&req, &input, [Serde.serializeCompleteMultipartUpload, Serde.addContentMd5])
var output = try await clientImpl.execute(with: &input, args: options)
var result = CompleteMultipartUploadResult()
try Serde.deserializeOutput(&result, &output, [Serde.deserializeCompleteMultipartUpload])
return result
}
/// 通过拷贝现有文件的方式上传单个分片
/// - Parameters:
/// - request: The request parameter to send
/// - request: Optional, operation options
/// - Returns: The result instance.
func uploadPartCopy(
_ request: UploadPartCopyRequest,
_ options: OperationOptions? = nil
) async throws -> UploadPartCopyResult {
var input = OperationInput(
operationName: "UploadPartCopy",
method: "PUT",
headers: [
"Content-Type": "application/xml",
]
)
input.bucket = try request.bucket.ensureRequired(field: "request.bucket")
input.key = try request.key.ensureRequired(field: "request.key")
try request.uploadId.ensureRequired(field: "request.uploadId")
try request.partNumber.ensureRequired(field: "request.partNumber")
var req = request
try Serde.serializeInput(&req, &input, [Serde.serializeUploadPartCopy, Serde.addContentMd5])
var output = try await clientImpl.execute(with: &input, args: options)
var result = UploadPartCopyResult()
try Serde.deserializeOutput(&result, &output, [Serde.deserializeUploadPartCopy])
return result
}
/// You can call this operation to cancel a multipart upload task and delete the parts that are uploaded by the multipart upload task.
/// - Parameters:
/// - request: The request parameter to send
/// - request: Optional, operation options
/// - Returns: The result instance.
func abortMultipartUpload(
_ request: AbortMultipartUploadRequest,
_ options: OperationOptions? = nil
) async throws -> AbortMultipartUploadResult {
var input = OperationInput(
operationName: "AbortMultipartUpload",
method: "DELETE",
headers: [
"Content-Type": "application/xml",
]
)
input.bucket = try request.bucket.ensureRequired(field: "request.bucket")
input.key = try request.key.ensureRequired(field: "request.key")
try request.uploadId.ensureRequired(field: "request.uploadId")
var req = request
try Serde.serializeInput(&req, &input, [Serde.serializeAbortMultipartUpload, Serde.addContentMd5])
var output = try await clientImpl.execute(with: &input, args: options)
var result = AbortMultipartUploadResult()
try Serde.deserializeOutput(&result, &output, [Serde.deserializeAbortMultipartUpload])
return result
}
/// You can call this operation to list all ongoing multipart upload tasks.
/// - Parameters:
/// - request: The request parameter to send
/// - request: Optional, operation options
/// - Returns: The result instance.
func listMultipartUploads(
_ request: ListMultipartUploadsRequest,
_ options: OperationOptions? = nil
) async throws -> ListMultipartUploadsResult {
var input = OperationInput(
operationName: "ListMultipartUploads",
method: "GET",
parameters: [
"uploads": "",
"encoding-type": "url",
]
)
input.bucket = try request.bucket.ensureRequired(field: "request.bucket")
var req = request
try Serde.serializeInput(&req, &input, [Serde.serializeListMultipartUploads, Serde.addContentMd5])
var output = try await clientImpl.execute(with: &input, args: options)
var result = ListMultipartUploadsResult()
try Serde.deserializeOutput(&result, &output, [Serde.deserializeListMultipartUploads])
return result
}
/// You can call this operation to list all parts that are uploaded by using a specified upload ID.
/// - Parameters:
/// - request: The request parameter to send
/// - request: Optional, operation options
/// - Returns: The result instance.
func listParts(
_ request: ListPartsRequest,
_ options: OperationOptions? = nil
) async throws -> ListPartsResult {
var input = OperationInput(
operationName: "ListParts",
method: "GET",
parameters: [
"encoding-type": "url",
]
)
input.bucket = try request.bucket.ensureRequired(field: "request.bucket")
input.key = try request.key.ensureRequired(field: "request.key")
try request.uploadId.ensureRequired(field: "request.uploadId")
var req = request
try Serde.serializeInput(&req, &input, [Serde.serializeListParts, Serde.addContentMd5])
var output = try await clientImpl.execute(with: &input, args: options)
var result = ListPartsResult()
try Serde.deserializeOutput(&result, &output, [Serde.deserializeListParts])
return result
}
}