acesso swiftui ao armazenamento de objetos em nuvem Tencent cos

Pessoalmente falando, é melhor usar o swiftui para se divertir, afinal a interface de escrita é muito mais rápida e intuitiva.
Parte da lógica precisa estar conectada ao upload da imagem, portanto, ela está conectada ao cos de armazenamento de objetos em nuvem da Tencent.
Existem apenas tutoriais rápidos no site oficial, não swiftui. Registre o processo de acesso do swiftui.

Primeiro apresente o projeto de integração do pod.

pod 'QCloudCOSXML' 
# 据说是精简版,不过看起来好像也没有啥效果,头文件的引入好像根据文档来还是会报错的。
# 本例子只是简单的上传,因此用哪个都行。
# pod 'QCloudCOSXML/Transfer' 

importar arquivo de cabeçalho

import QCloudCOSXML
// 精简版用下边的这个好像会报错,找不到这个,用上边的没问题
// import QCloudCOSXMLTransfer 

inicialização

De um modo geral, a parte do aplicativo swiftui é assim. No entanto, não é aceitável herdar diretamente o protocolo de acordo com o tutorial.

@main
struct DemoApp: App {
    
    
    var body: some Scene {
    
    
        WindowGroup {
    
    
            ContentView()
        }
    }
}

Primeiro crie um novo appdelegate

class AppDelegate: NSObject, UIApplicationDelegate, QCloudSignatureProvider {
    
    
    
}

Em seguida, implemente os retornos de chamada de inicialização e assinatura dentro. Essas duas partes não precisam ser escritas no lançamento final do appdelegate, porque o aplicativo atual geralmente requer um acordo de privacidade. Ele expõe um método para chamar swiftui, que é mais conveniente para controlar o processo. É melhor colar o código em vez de digitá-lo à mão. Por exemplo, QCloudAuthentationV5Creator tem um método virtual QCloudAuthentationCreator, que falhará se você não prestar atenção.
Além disso, este exemplo usa a maneira como o cliente se comunica diretamente com o cos. Se houver um vazamento, também é possível alterar o segredo diretamente.

class AppDelegate: NSObject, UIApplicationDelegate, QCloudSignatureProvider {
    
    
    
    func signature(with fileds: QCloudSignatureFields!, request: QCloudBizHTTPRequest!, urlRequest urlRequst: NSMutableURLRequest!, compelete continueBlock: QCloudHTTPAuthentationContinueBlock!) {
    
    
        let credential = QCloudCredential.init()
        credential.secretID = "xxx" // 密钥ID
        credential.secretKey = "xxx" // 密钥secret
        let creator = QCloudAuthentationV5Creator.init(credential: credential)
        let signature = creator?.signature(forData: urlRequst)
        continueBlock(signature, nil)
    }
    
    func initQCloud() {
    
    
        let config = QCloudServiceConfiguration.init()
        let endpoint = QCloudCOSXMLEndPoint.init()
        endpoint.regionName = "ap-beijing" // bucket region
        endpoint.useHTTPS = true
        config.endpoint = endpoint
        config.signatureProvider = self
        QCloudCOSXMLService.registerDefaultCOSXML(with: config)
        QCloudCOSTransferMangerService.registerDefaultCOSTransferManger(
            with: config)
    }
}

Adicione o appdelegate ao aplicativo swiftui.

struct DemoApp: App {
    
    
    @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
    
    var body: some Scene {
    
    
        WindowGroup {
    
    
            ContentView()
                .onAppear {
    
    
                    delegate.initQCloud()
                }
        }
    }
}

Isso conclui a inicialização.
Inicialize o código completo:

import SwiftUI
import QCloudCOSXML

class AppDelegate: NSObject, UIApplicationDelegate, QCloudSignatureProvider {
    
    
    
    func signature(with fileds: QCloudSignatureFields!, request: QCloudBizHTTPRequest!, urlRequest urlRequst: NSMutableURLRequest!, compelete continueBlock: QCloudHTTPAuthentationContinueBlock!) {
    
    
        let credential = QCloudCredential.init()
        credential.secretID = "xxx" // 密钥ID
        credential.secretKey = "xxx" // 密钥secret
        let creator = QCloudAuthentationV5Creator.init(credential: credential)
        let signature = creator?.signature(forData: urlRequst)
        continueBlock(signature, nil)
    }
    
    func initQCloud() {
    
    
        let config = QCloudServiceConfiguration.init()
        let endpoint = QCloudCOSXMLEndPoint.init()
        endpoint.regionName = "ap-beijing" // bucket region
        endpoint.useHTTPS = true
        config.endpoint = endpoint
        config.signatureProvider = self
        QCloudCOSXMLService.registerDefaultCOSXML(with: config)
        QCloudCOSTransferMangerService.registerDefaultCOSTransferManger(
            with: config)
    }
}

struct DemoApp: App {
    
    
    @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
    
    var body: some Scene {
    
    
        WindowGroup {
    
    
            ContentView()
                .onAppear {
    
    
                    delegate.initQCloud()
                }
        }
    }
}

carregar parte

seção de upload simples

import QCloudCOSXML

func updatePic(img: UIImage) {
    
    
    let picPath = "temp/\(Day(date: date).format(format: "yyyy-MM-dd"))/\(UUID().uuidString).png"
    
    let put = QCloudCOSXMLUploadObjectRequest<AnyObject>()
    put.bucket = "xxx" // bucket id
    put.object = picPath // 上传路径
    put.body = img.pngData() as AnyObject
    put.setFinish {
    
     res, err in
        print("upload obj finish \(res) \(err)")
    }
    QCloudCOSTransferMangerService.defaultCOSTransferManager().uploadObject(put)
}

Neste ponto, o acesso cos está completo.

Acho que você gosta

Origin blog.csdn.net/xo19882011/article/details/131619581
Recomendado
Clasificación