Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

144
Visualizações
La carga a S3 desde el navegador mediante la URL de carga firmada falla

Estoy tratando de cargar un archivo a S3 directamente desde el navegador. Para esto, estoy generando una URL de carga firmada en mi servidor.

Cuando intento cargar un archivo a la url generada desde el navegador usando

 var xhr = new XMLHttpRequest(); xhr.open('PUT', signedUrl); xhr.send(file);

Obtuve el siguiente error

 <Error> <Code> SignatureDoesNotMatch </Code> <Message> The request signature we calculated does not match the signature you provided. Check your key and signing method. </Message> ... </Error>

Puedo subir a la URL firmada usando curl con el siguiente comando

 curl -T <file> -X PUT '<signed-url>'

El navegador está enviando mi solicitud como datos de formulario de varias partes, lo que está causando el problema. ¿Cómo soluciono el problema?

Estoy generando la URL firmada usando el siguiente código

 var params = { Bucket: bucket, Key: s3Key, ACL: "authenticated-read", Expires: 600 }; S3.getSignedUrl('putObject', params, (err, data) => { const returnData = { url: data }; reply(returnData); });

Editar: Para que quede claro, he permitido que todos los orígenes envíen solicitudes PUT en la configuración CORS del depósito.

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

De acuerdo, el problema era que el navegador enviaba Content-Type en el encabezado de la solicitud, pero la URL firmada no se generaba para el tipo de contenido. En lugar de esto

 var params = { Bucket: bucket, Key: s3Key, ACL: "authenticated-read", Expires: 600 }; S3.getSignedUrl('putObject', params, ...);

hice esto

 var params = { Bucket: bucket, Key: s3Key, ACL: "authenticated-read", Expires: 600, ContentType: require('mime').lookup(filename) }; S3.getSignedUrl('putObject', params, ...);

¡Y funcionó!

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda