Como implementar funcionalidade de upload de arquivos com Edge Functions
Este guia demonstra como implementar funcionalidade segura de upload de arquivos usando Azion Edge Functions e Edge Storage. Ao lidar com uploads de arquivos no edge, você pode fornecer velocidades de upload mais rápidas e melhor experiência do usuário mantendo segurança e escalabilidade.
Requisitos
Antes de começar, certifique-se de ter:
- Uma conta na Azion
- Azion CLI instalada e configurada
- Node.js versão 18 ou superior
- Edge Storage habilitado em sua conta Azion
Código
Este é um exemplo de código de como usar Edge Functions com Edge Storage para implementar uma funcionalidade de upload de arquivos. O exemplo completo do código você pode encontrar no repositório GitHub.
import type { AzionBucketObject, AzionStorageResponse } from "azion/storage";import { createObject } from "azion/storage";import { Hono } from "hono";import { fire } from "hono/service-worker";
const app = new Hono();
app.post("/upload", async (c) => { const body = await c.req.parseBody(); const file = body["file"]; // File | string
// First check if file is a valid File object if ( !file || typeof file !== "object" || typeof file.arrayBuffer !== "function" ) { return c.json({ message: "Invalid file" }, 400); }
// Check if file size exceeds 2MB limit const maxSize = 2 * 1024 * 1024; // 2MB if (file.size > maxSize) { return c.json({ message: "File size exceeds 2MB limit" }, 413); }
try { const { data: newObject, error }: AzionStorageResponse<AzionBucketObject> = await createObject({ bucket: process.env.BUCKET_NAME!, key: file.name, // @ts-expect-error content is wrongly typed content: await file.arrayBuffer(), });
if (error) { throw new Error(error.message); }
if (newObject) { console.log(`Object created with key: ${newObject.key}`); } else { console.error("Failed to create object", error); }
// @ts-expect-error content is wrongly typed const content = new Uint8Array(newObject.content);
return c.body(content, { status: 200, headers: { "Content-Type": file.type, "Content-Disposition": `attachment; filename="${newObject?.key}"`, "Content-Length": newObject?.size?.toString() ?? "0", }, }); } catch (error) { console.error("Error uploading file:", error); return c.json({ message: "Error uploading file" }, 500); }});
fire(app);
Deploy na Azion
Passo 1: Autentique-se na Azion
- Faça login na sua conta Azion via CLI:
azion login
- Siga os prompts de autenticação para conectar sua CLI com sua conta Azion.
Passo 2: Faça o deploy da Edge Function
Faça o deploy de sua aplicação de upload de arquivos na edge network da Azion:
azion deploy
O processo de deploy irá:
- Fazer upload do código da sua Edge Function
- Configurar a edge application
- Configurar as regras de roteamento necessárias
- Configurar permissões de armazenamento
- Fornecer um domínio único
Passo 3: Configure permissões de armazenamento
- Acesse Console Azion > Edge Storage
- Selecione seu bucket de armazenamento
- Configure permissões apropriadas para sua Edge Function ler/escrever arquivos
Passo 4: Acesse sua aplicação
Após o deploy, você receberá um domínio como https://xxxxxxx.map.azionedge.net
. Sua aplicação de upload de arquivos estará disponível nesta URL em alguns minutos após a propagação do DNS.
Entendendo a implementação
Processo de upload de arquivos
A Edge Function de upload de arquivos tipicamente manipula:
- Validação de requisição: Verificação de tipos de arquivo, tamanhos e segurança
- Parsing de formulário multipart: Processamento de requisições multipart/form-data
- Processamento de arquivo: Validação e preparação de arquivos para armazenamento
- Upload para armazenamento: Armazenamento de arquivos no Edge Storage
- Geração de resposta: Retorno de status de upload e informações do arquivo
Considerações de segurança
- Validação de tipo de arquivo: Permitir apenas tipos específicos de arquivo
- Limites de tamanho: Impor restrições de tamanho máximo de arquivo
- Scanning de vírus: Implementar detecção de malware quando possível
- Controle de acesso: Validar permissões do usuário antes dos uploads
- Sanitização de entrada: Limpar nomes de arquivos e metadados
Principais benefícios
- Performance: Processamento de upload no edge reduz latência
- Escalabilidade: Escala automaticamente com a demanda
- Alcance global: Edge locations oferecem cobertura mundial
- Eficiência de custo: Transferência de dados e custos de armazenamento otimizados
Testando sua aplicação de upload de arquivos
Passo 1: Teste a funcionalidade de upload de arquivos
- Navegue até sua aplicação implementada
- Use o formulário de upload para testar vários tipos de arquivo
- Verifique se os arquivos são armazenados com sucesso em seu bucket Edge Storage
- Teste limites de tamanho e restrições de tipo de arquivo
Passo 2: Teste recursos de segurança
- Validação de tipo de arquivo: Tente fazer upload de tipos de arquivo restritos
- Limites de tamanho: Teste com arquivos que excedem seu limite de tamanho
- Arquivos maliciosos: Teste com arquivos contendo conteúdo suspeito
- Path traversal: Verifique sanitização de nomes de arquivos
Passo 3: Testes de performance
- Velocidade de upload: Teste com vários tamanhos de arquivo
- Uploads simultâneos: Teste múltiplos uploads simultâneos
- Tratamento de erros: Teste interrupções de rede e falhas
Casos de uso comuns
- Gerenciamento de documentos: Upload e armazenamento de documentos comerciais
- Galerias de imagens: Lidar com uploads de fotos e imagens
- Conteúdo de mídia: Processar uploads de arquivos de vídeo e áudio
- Anexos de formulários: Lidar com anexos de arquivos em formulários web
- Importação de dados: Processar uploads de arquivos CSV e de dados
Solução de problemas
Problemas comuns e soluções
- Falhas de upload: Verifique limites de tamanho de arquivo e tipos permitidos
- Erros de armazenamento: Verifique permissões do bucket e configuração
- Problemas de performance: Otimize processamento de arquivos e operações de armazenamento
- Questões de segurança: Revise lógica de validação e sanitização de arquivos
Melhores práticas de tratamento de erros
- Mensagens de erro claras: Forneça feedback específico aos usuários
- Registros: Implemente registros abrangentes de erros
- Mecanismos de retry: Lide com falhas temporárias eficientemente
- Indicadores de progresso: Mostre progresso de upload para arquivos grandes
Recursos avançados
Implementando processamento de arquivos
Você pode estender a funcionalidade básica de upload com:
- Redimensionamento de imagens: Redimensionar automaticamente imagens enviadas
- Conversão de formato: Converter arquivos para diferentes formatos
- Extração de metadados: Extrair e armazenar metadados de arquivos
- Geração de thumbnails: Criar imagens de pré-visualização
Adicionando autenticação
Implemente autenticação de usuário para proteger uploads de arquivos:
// Exemplo de verificação de autenticaçãofunction authenticateUser(request) { const authHeader = request.headers.get('Authorization'); // Implemente sua lógica de autenticação return validateToken(authHeader);}
Próximos passos
- Explore técnicas avançadas de processamento de arquivos
- Implemente recursos de exclusão e gerenciamento de arquivos
- Adicione autenticação e autorização de usuário
- Integre com outros produtos Azion como Edge Cache
- Monitore performance de upload e otimize adequadamente