Мне нужно изменить имя файла перед его загрузкой, но свойство доступно только для чтения:
https://developer.mozilla.org/en-US/docs/Web/API/File
так
this.imageFile.name = newFileName;
не работает.
Я посмотрел здесь другие вопросы, но ответы на них все - «создайте новый файл, используя File contructor».
например
var file = new File(['foo'], 'newName', {type:'img/jpg'});
Но конструктор недоступен в IE или Edge.
В конце концов, я обнаружил, что данные форм хорошо поддерживаются на caniuse.com, и вы можете указать новое имя файла, например:
var newFileName = file.filename + "new";
var formData = new FormData();
formData.append('file', file, newFileName);
Между этими двумя решениями я попробовал другое:
Object.defineProperty(this.imageFile, 'name', {
writable: true
});
this.imageFile.name = newFileName;
Ясно, что это взлом, но он работал. Я решил не использовать этот метод, так как метод добавления FormData использует имя файла для решения этой проблемы, я просто не понимаю, почему это свойство только для чтения, если я могу вручную изменить дескриптор, и он отлично работает.