Переименование объекта File () в JavaScript

Я хотел бы, чтобы мои пользователи могли переименовать файл перед его загрузкой.

у меня есть File объект в Javascript, который имеет name свойство, которое уже установлено, но я хотел бы, чтобы это можно было обновить. Прямо сейчас делаю очевидное myFile.name = "new-name.txt" возвращает ошибку, что это свойство доступно только для чтения.

каков наилучший способ изменить name свойство на JavaScript

4 ответов


вы можете добавить input тег с именем на нем и скрыть name свойство от пользователя. На сервере просто используйте input как имя и игнорировать имя по умолчанию.


теперь file.name является свойством только для чтения, я нашел, что это лучший способ переименовать объект файла в браузере:

const myNewFile = new File([myFile], 'new_name.png', {type: myFile.type});

попробуйте это:

var blob = file.slice(0, -1, 'image/png'); 
var newFile = new File([blob], 'name.png', {type: 'image/png'});

Примечание.: это для типа изображения, вы должны изменить этот тип на самом деле вы используете.


в ответ на ответ Александра Таборды... Первый и второй параметры объекта.slice () - это начальные и конечные байты исходного blob, которые должны сформировать новый blob. Говоря:

var blob = file.slice(0,-1);

вы не говорите " копировать в конец файла "(что, как я думаю, является вашей целью), вы говорите"копировать весь blob, кроме последнего байта".

Как говорит @carestad

var blob = file.slice(0, file.size);

с последующим созданием нового объекта File() должен создать точную копию с новым именем.

обратите внимание, что с png файл будет считаться недействительным без последнего байта.

From:https://developer.mozilla.org/en-US/docs/Web/API/Blob/slice