Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

583
Views
¿Por qué mi pdf se carga utilizando una URL de AWS S3 prefirmada que no tiene el tipo de contenido correcto?

Uso AWS S3 con URL prefirmadas tanto para cargar ( putObject ) como para descargar ( getObject ).

Noté que las direcciones URL generadas para cargar archivos PDF se descargan en lugar de mostrarse en el destino _blank . Lo rastreé hasta el hecho de que mis objetos s3 tienen un campo de metadatos ContentType establecido en application/x-www-form-urlencoded en lugar de application/pdf como solicité. Funciona cuando cambio manualmente los metadatos del tipo de contenido en S3.

El código utilizado para generar la url putObject putObject es este:

 console.log("presigning with ", fileInput); /* Will print something like: presigning with [Object: null prototype] { name: 'myFile.pdf', mimetype: 'application/pdf', size: 321528 } */ const { name, size, mimetype } = fileInput const signedUrlExpireSeconds = 60 * 60 let data = {} const key = "articles/" + Date.now().toString() + ".pdf" let params = { Bucket: 'mybucket', Key: key, Expires: signedUrlExpireSeconds, ContentType: mimetype }; data.url = await uploadToS3(params)// what I will use to upload from the client browser export const uploadToS3 = (params) => { AWS.config.update({ accessKeyId: process.env.S3ACCESSKEYID, secretAccessKey: process.env.S3SECRETACCESSKEY, region: process.env.S3REGION }); var s3 = new AWS.S3(); return s3.getSignedUrlPromise('putObject', params); }

La URL generada contiene, de hecho, la opción de tipo de contenido de la siguiente manera (URL truncada):

 https://mybucket.s3.eu-west-3.amazonaws.com/articles/1582299553999.pdf?Content-Type=application%2Fpdf&X-Amz-Algorithm......

Sin embargo, cuando trato de mostrar mi pdf en una pestaña _blank , el navegador lo descarga debido al tipo de contenido defectuoso application/x-www-form-urlencoded establecido durante la carga de S3.

Supongo que la URL getObject getObject está bien, ya que funciona cuando actualizo manualmente en S3 el tipo de contenido del archivo.

¿Me estoy perdiendo algo con la carga?


ACTUALIZAR

Me preguntaba si tal vez estaba relacionado con la solicitud de venta de axios realizada sobre la base de la URL prefirmada. Según los comentarios de este problema , logré obtener el tipo de contenido adecuado.

Sin embargo, el pdf no se carga porque el favicon no está disponible... Hay 2 llamadas de red, una para el pdf que está bien con 304 y otra para un favicon que recibe una solicitud incorrecta de 400 en firefox, y un 403 prohibido en cromo. Como consecuencia (al parecer), el archivo pdf se considera inválido.

Hice que el archivo favico sea el único público, pero el PDF aún se considera inválido. Sin embargo, se muestra correctamente cuando se descarga.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Para referencia futura de todos, al enviar una solicitud de URL prefirmada, debe proporcionar el tipo de contenido en la solicitud, en axios o cualquiera que sea su cliente http. De lo contrario, se le dará esta application/x-www-form-urlencoded . Es por eso que cuando recupera con .getObject , ve el Content-Type establecido en application/x-www-form-urlencoded .

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!