Estoy tratando de resolver esto desde hace horas, pero simplemente no puedo entender qué es lo que está mal aquí.
Tengo un archivo llamado test_!§$%&_ÄäÜüÖö.mp4 que quiero cargar en un depósito de AWS S3. La carga funciona bien si no hay caracteres especiales (sí, probé la respuesta oficial de los documentos de AWS usando decodeURIComponnet(filename) , pero esto no funcionó). No estoy tan confundido con los caracteres especiales !§$%& pero sí quiero que se convierta la diéresis alemana. Por lo tanto, estoy haciendo tres cosas:
// remove all special chars (key comes from the file to upload) let cleanKey = key.replace(/[°^!"§$%&\\()[\]{}=?*+#<>]/g, ""); // convert spaces to `_` cleanKey = cleanKey.replace(" ", "_"); // convert German characters const characters = [...cleanKey].map(char => { switch (encodeURI(char)) { case encodeURI("Ä"): return "Ae"; case encodeURI("ä"): return "ae"; case encodeURI("Ö"): return "Oe"; case encodeURI("ö"): return "oe"; case encodeURI("Ü"): return "Ue"; case encodeURI("ü"): return "ue"; default: return char; } }); // return converted key return characters.join(""); El problema es que los caracteres de mi sistema de archivos (MacOS 12.0.1) no coinciden en la declaración de switch . He leído un par de discusiones (por ejemplo, here y here ) y parece que la decodificación de caracteres funciona de manera diferente en cada sistema operativo. Desafortunadamente, no pude averiguar cómo convertiría mi nombre de archivo en una cadena UTF-8 normal (si es que esto existe) para analizar los caracteres no válidos.
Sé que mi enfoque probablemente no esté realmente listo para la producción (por ejemplo, si alguien quiere cargar un archivo escrito en letras hebreas), así que si alguien tiene una mejor solución para no obtener el
The specified key does not exist
error, por favor hágamelo saber.