Можно ли изменить имя файла JavaScript, изменив дескриптор его свойства записи? - PullRequest
1 голос
/ 02 апреля 2019

Мне нужно изменить имя файла перед его загрузкой, но свойство доступно только для чтения:

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 использует имя файла для решения этой проблемы, я просто не понимаю, почему это свойство только для чтения, если я могу вручную изменить дескриптор, и он отлично работает.

1 Ответ

0 голосов
/ 17 апреля 2019

Я просто не понимаю, почему это свойство только для чтения ...

Поскольку спецификация говорит так:

ПАгентыследует попытаться установить состояние моментального снимка объекта File в состояние основного хранилища на диске во время получения ссылки.

interface File : Blob {
  readonly attribute DOMString name;
  readonly attribute long long lastModified;
};

Атрибут name представляет текущее имя файла, поэтомуне имеет смысла иметь возможность изменять его в объекте File.

Хотя, когда вы отправляете содержимое этого файла на сервер с FormData.append() с третьим параметром, это действие нене изменяет ни состояние файла, ни базовое хранилище, которое оно представляет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...