Las solicitudes PUT donde el cuerpo es un archivo no funcionan en Safari (versión 13.x). El mismo código funciona en Chrome y Firefox. Intenté usar Fetch API y Axios, ninguno funciona en Safari.
El objeto de archivo que se pasa a la llamada puede provenir de la API de arrastrar y soltar o de una entrada de tipo de archivo simple. Ambos funcionan en Chrome / Firefox pero ninguno en Safari.
Si bien los archivos enviados con la application/pdf funcionan bien, parece que cualquier cosa con el prefijo image/ o incluso octet-stream hace que Safari no envíe el cuerpo. Según el panel de desarrolladores de Safari, el cuerpo tiene 0 bytes.
Las solicitudes tienen los Content-Length y Content-Type correctos. Después de un tiempo, S3 responde con un mensaje que dice que no ha recibido ningún byte en los últimos 20 segundos. La respuesta es un 400 y se cierra la conexión.
ACTUALIZACIÓN: Según lo informado por Safari, el cuerpo tiene 0 bytes.
Código
// filesToUpload is an array of File objects, and is // correctly populated with appropriate file types and sizes var options = { headers: { 'Content-Type': filesToUpload[uploadIndex].type, } }; await axios.put(url, filesToUpload[uploadIndex], options); // This does not work either await fetch(url, { method: "PUT", body: filesToUpload[uploadIndex] }); Soy consciente del error en Safari 14.1 que impide que funcionen las entradas de archivos, pero esto no está relacionado. La entrada del archivo funciona correctamente aquí, al igual que la API de arrastrar y soltar, al menos desde mi perspectiva. Puedo ver los tipos y tamaños de archivo correctos en la matriz filesToUpload .