|
PROFESSIONAL NEWSGROUPS WINDEV, WEBDEV and WINDEV Mobile |
| | | | | |
Home → WINDEV 25 → Amazon S3 - mais conhecido como Balde da Amazon integrando com WLanguage |
Amazon S3 - mais conhecido como Balde da Amazon integrando com WLanguage |
Started by Boller, Oct., 14 2024 7:06 PM - No answer |
| |
| | | |
|
| |
Registered member 3,774 messages |
|
Posted on October, 14 2024 - 7:06 PM |
Prezados,
Segue abaixo um material de estudo do S3 da Amazon:
Esse artigo é sobre o upload eficiente de arquivos para o Amazon S3, podemos aplicar os conceitos no contexto do WLanguage para implementar uma solução que trabalhe com o S3. O artigo aborda métodos como multipart upload para grandes arquivos, o que pode ser adaptado para o WLanguage usando bibliotecas HTTP e operações assíncronas.
A seguir, vamos construir um exemplo de código para realizar uploads de arquivos para o Amazon S3 de maneira eficiente, utilizando WLanguage.
Exemplo em WLanguage para upload de arquivos ao Amazon S3
1. Pré-requisitos
• Credenciais AWS: Você precisará de uma Access Key e Secret Key para se autenticar com o serviço S3 da Amazon. • Bucket S3: Um bucket previamente configurado no S3 onde os arquivos serão enviados.
2. Dependências
Para enviar arquivos para o S3, usaremos as funções HTTP nativas do WLanguage e, opcionalmente, o uso de Multipart Upload para uploads grandes.
Classe S3Uploader em WLanguage
CLASS S3Uploader // Atributos para armazenar as credenciais e o bucket S3 s3AccessKey é string s3SecretKey é string s3BucketName é string s3Region é string // Construtor para inicializar a classe com credenciais CONSTRUCTOR(S3AccessKey é string, S3SecretKey é string, S3BucketName é string, S3Region é string) s3AccessKey = S3AccessKey s3SecretKey = S3SecretKey s3BucketName = S3BucketName s3Region = S3Region END // Função para gerar a URL do S3 PROCEDURE GenerateS3URL(ObjectKey é string) RETORNA string RETURN "https://" + s3BucketName + ".s3." + s3Region + ".amazonaws.com/" + ObjectKey END // Função para realizar o upload do arquivo para o S3 PROCEDURE UploadFileToS3(FilePath é string, ObjectKey é string) RETORNA booleano s3URL é string HTTPResponse é httpRequest FileBinaryContent é buffer AuthorizationHeader é string DateHeader é string = DateSys() + "T" + TimeSys() + "Z" // Gera a URL do S3 para o upload s3URL = GenerateS3URL(ObjectKey) // Lê o conteúdo do arquivo FileBinaryContent = fLoadBuffer(FilePath) // Cria o cabeçalho de autorização para autenticação com S3 AuthorizationHeader = GenerateAuthorizationHeader(ObjectKey, FileBinaryContent, DateHeader) // Envia o arquivo usando HTTP POST HTTPResponse = HTTPRequest(s3URL, httpPost, FileBinaryContent, AuthorizationHeader) // Verifica se o upload foi bem-sucedido SE HTTPResponse.StatusCode = 200 ENTÃO RESULTADO Verdadeiro SENÃO RESULTADO Falso FIM END // Função para gerar o cabeçalho de autorização PROCEDURE GenerateAuthorizationHeader(ObjectKey é string, Content é buffer, DateHeader é string) RETORNA string // Esta função deve gerar a assinatura necessária para autenticação com o AWS S3 // O processo envolve a criação de uma assinatura HMAC-SHA256 com as credenciais da AWS. // (Simplificado para fins de exemplo) LOCAL Signature é string Signature = HMACSHA256(s3SecretKey, ObjectKey + DateHeader) RETURN "AWS " + s3AccessKey + ":" + Signature END END
Exemplo de uso da classe S3Uploader
// Credenciais da AWS (inserir suas próprias credenciais) AWSAccessKey é string = "SEU_ACCESS_KEY" AWSSecretKey é string = "SEU_SECRET_KEY" AWSBucket é string = "seu-bucket" AWSRegion é string = "us-east-1"
// Caminho do arquivo local e o nome do arquivo no S3 FilePath é string = "C:\Caminho\Para\SeuArquivo.txt" ObjectKey é string = "uploads/SeuArquivo.txt"
// Instanciando o uploader S3 mS3Uploader é S3Uploader(AWSAccessKey, AWSSecretKey, AWSBucket, AWSRegion)
// Realizando o upload SE mS3Uploader.UploadFileToS3(FilePath, ObjectKey) ENTÃO Info("Upload para o S3 realizado com sucesso!") SENÃO Error("Falha no upload para o S3.") FIM
Explicação:
1. Classe S3Uploader: • A classe gerencia a autenticação com o Amazon S3 e realiza o upload do arquivo. • O método UploadFileToS3 envia o arquivo para o bucket S3 usando uma requisição HTTP POST. • O cabeçalho de autorização é gerado utilizando a chave secreta e a chave de acesso da AWS. 2. Autenticação com S3: • O método GenerateAuthorizationHeader cria uma assinatura para autenticar a requisição com S3, utilizando HMAC-SHA256. • Essa assinatura é necessária para que o S3 reconheça a requisição como válida. 3. Upload multipart (não implementado neste exemplo): • Se você está lidando com arquivos muito grandes, pode implementar o multipart upload, que divide o arquivo em partes e faz upload de cada uma separadamente. Isso pode ser feito usando uma abordagem semelhante, onde o arquivo é dividido em buffers menores e cada parte é enviada.
Conclusão:
Este exemplo mostra como fazer o upload de arquivos para o Amazon S3 usando WLanguage. Ele foi adaptado do artigo original sobre métodos eficientes de upload para S3 e inclui autenticação com AWS usando as credenciais de acesso. Em projetos maiores, você pode expandir essa classe para suportar mais funcionalidades, como uploads multipart, gerenciamento de erros detalhado e mais tipos de requisições (como PUT e DELETE).
Aqui está um novo exemplo de upload de arquivos para o Amazon S3 utilizando WLanguage, com uma abordagem mais prática e detalhada, incluindo o uso de uploads multipart para arquivos grandes, o que torna o processo mais eficiente.
Exemplo em WLanguage para upload multipart para o Amazon S3
Pré-requisitos:
• Credenciais AWS: Você precisará das chaves de acesso da AWS (Access Key e Secret Key). • Bucket S3: Um bucket já configurado no S3.
Classe S3MultipartUploader
CLASS S3MultipartUploader s3AccessKey é string s3SecretKey é string s3BucketName é string s3Region é string
// Construtor CONSTRUCTOR(S3AccessKey é string, S3SecretKey é string, S3BucketName é string, S3Region é string) s3AccessKey = S3AccessKey s3SecretKey = S3SecretKey s3BucketName = S3BucketName s3Region = S3Region END // Função para gerar a URL do S3 PROCEDURE GenerateS3URL(ObjectKey é string) RETORNA string RETURN "https://" + s3BucketName + ".s3." + s3Region + ".amazonaws.com/" + ObjectKey END
// Função para iniciar o upload multipart PROCEDURE StartMultipartUpload(ObjectKey é string) RETORNA string LOCAL s3URL é string LOCAL HTTPResponse é httpRequest LOCAL UploadID é string LOCAL AuthorizationHeader é string LOCAL DateHeader é string = DateSys() + "T" + TimeSys() + "Z" s3URL = GenerateS3URL(ObjectKey) + "?uploads" AuthorizationHeader = GenerateAuthorizationHeader(ObjectKey, "", DateHeader) // Inicia o upload multipart HTTPResponse = HTTPRequest(s3URL, httpPost, "", AuthorizationHeader) // Verifica se a requisição foi bem-sucedida SE HTTPResponse.StatusCode = 200 ENTÃO // Extrai o UploadID do XML de resposta UploadID = XMLExtractUploadID(HTTPResponse.Content) RESULTADO UploadID SENÃO RESULTADO "" FIM END
// Função para enviar uma parte do arquivo PROCEDURE UploadPart(FilePart é buffer, ObjectKey é string, UploadID é string, PartNumber é inteiro) RETORNA booleano LOCAL s3URL é string LOCAL HTTPResponse é httpRequest LOCAL AuthorizationHeader é string LOCAL DateHeader é string = DateSys() + "T" + TimeSys() + "Z"
s3URL = GenerateS3URL(ObjectKey) + "?partNumber=" + NumToString(PartNumber) + "&uploadId=" + UploadID AuthorizationHeader = GenerateAuthorizationHeader(ObjectKey, FilePart, DateHeader) // Envia a parte do arquivo HTTPResponse = HTTPRequest(s3URL, httpPut, FilePart, AuthorizationHeader) // Verifica se o upload da parte foi bem-sucedido SE HTTPResponse.StatusCode = 200 ENTÃO RESULTADO Verdadeiro SENÃO RESULTADO Falso FIM END
// Função para finalizar o upload multipart PROCEDURE CompleteMultipartUpload(ObjectKey é string, UploadID é string) RETORNA booleano LOCAL s3URL é string LOCAL HTTPResponse é httpRequest LOCAL AuthorizationHeader é string LOCAL DateHeader é string = DateSys() + "T" + TimeSys() + "Z"
s3URL = GenerateS3URL(ObjectKey) + "?uploadId=" + UploadID AuthorizationHeader = GenerateAuthorizationHeader(ObjectKey, "", DateHeader) // Finaliza o upload multipart HTTPResponse = HTTPRequest(s3URL, httpPost, "", AuthorizationHeader) // Verifica se a finalização foi bem-sucedida SE HTTPResponse.StatusCode = 200 ENTÃO RESULTADO Verdadeiro SENÃO RESULTADO Falso FIM END
// Função para gerar o cabeçalho de autorização PROCEDURE GenerateAuthorizationHeader(ObjectKey é string, Content é buffer, DateHeader é string) RETORNA string LOCAL Signature é string Signature = HMACSHA256(s3SecretKey, ObjectKey + DateHeader) RETURN "AWS " + s3AccessKey + ":" + Signature END
// Função para extrair o UploadID da resposta XML PROCEDURE XMLExtractUploadID(ResponseXML é string) RETORNA string // Simplificado: busca e extrai o UploadID no XML retornado // Aqui utilizamos uma função de parsing XML ou regex para extrair o ID RESULTADO ExtrairelementoXML(ResponseXML, "UploadId") END END
Exemplo de uso da classe S3MultipartUploader, este exemplo faz o upload de um arquivo dividido em partes.
// Credenciais da AWS AWSAccessKey é string = "SEU_ACCESS_KEY" AWSSecretKey é string = "SEU_SECRET_KEY" AWSBucket é string = "seu-bucket" AWSRegion é string = "us-east-1"
// Caminho do arquivo local e o nome do arquivo no S3 FilePath é string = "C:\Caminho\Para\SeuArquivoGrande.txt" ObjectKey é string = "uploads/SeuArquivoGrande.txt"
// Instancia o uploader multipart mS3Uploader é S3MultipartUploader(AWSAccessKey, AWSSecretKey, AWSBucket, AWSRegion)
// Inicia o upload multipart UploadID é string = mS3Uploader.StartMultipartUpload(ObjectKey)
SE UploadID = "" ENTÃO Error("Falha ao iniciar o upload multipart.") SENÃO // Divide o arquivo em partes e faz o upload FileContent é buffer = fLoadBuffer(FilePath) FileSize é inteiro = Length(FileContent) PartSize é inteiro = 5 * 1024 * 1024 // Tamanho de cada parte: 5 MB TotalParts é inteiro = IntegerDivision(FileSize, PartSize) + 1
PARA PartNumber = 1 ATÉ TotalParts // Calcula o tamanho da parte e o conteúdo da parte Start é inteiro = (PartNumber - 1) * PartSize + 1 Part é buffer = Extract(FileContent, Start, PartSize) SE mS3Uploader.UploadPart(Part, ObjectKey, UploadID, PartNumber) = Falso ENTÃO Error("Falha no upload da parte " + NumToString(PartNumber)) RETORNA FIM FIM
// Completa o upload multipart SE mS3Uploader.CompleteMultipartUpload(ObjectKey, UploadID) ENTÃO Info("Upload multipart para o S3 concluído com sucesso!") SENÃO Error("Falha ao finalizar o upload multipart.") FIM FIM
Explicação:
1. Iniciar o Upload Multipart: • A função StartMultipartUpload inicia o processo de upload multipart no S3 e retorna um UploadID que será usado para as partes subsequentes. 2. Enviar cada parte: • O arquivo é dividido em partes de 5 MB usando a função Extract. Cada parte é enviada para o S3 com a função UploadPart. 3. Completar o Upload: • Quando todas as partes são enviadas, chamamos a função CompleteMultipartUpload para finalizar o upload no S3.
Conclusão:
Este exemplo mostra como realizar um upload eficiente de arquivos grandes para o Amazon S3 usando WLanguage com multipart upload, seguindo as melhores práticas. O uso de uploads multipart torna o processo mais robusto e escalável, especialmente para arquivos de grande tamanho.
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|