Файловый объект с пользовательскими свойствами - PullRequest
0 голосов
/ 26 апреля 2018

Я хочу хранить файлы на сервере с пользовательскими свойствами файла. На стороне клиента я добавляю свойства:

let file = new File([blob], 'flower.jpg')
file.custom = "another properties"

это дает мне

custom:"another properties"
lastModified:1524742832101
lastModifiedDate:Thu Apr 26 2018 13:40:32 GMT+0200 (W. Europe Daylight Time {}
name:"flower.jpg"
size:845941
type:"image/jpeg"
webkitRelativePath:""

Когда я отправляю этот файл на свой сервер узлов, пользовательское свойство удаляется. Я использую formData и Multer для загрузки файла.

fieldname: 'images',
originalname: 'flower.jpg',
encoding: '7bit',
mimetype: 'image/jpeg',
destination: 'uploads/',
size: 845941

Есть ли способ сохранить файл, включая пользовательские свойства?

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Использовать Object.defineProperty () как это

const object1 = {};

Object.defineProperty(object1, 'property1', {
  value: 42,
  writable: false
});

object1.property1 = 77;
// throws an error in strict mode

console.log(object1.property1);
// expected output: 42

Подробнее здесь https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty

0 голосов
/ 06 июня 2018

Я столкнулся с похожим сценарием с multer / express и в итоге добавил дополнительное свойство для каждого загружаемого файла. Потом вытащил дополнительное свойство, соответствующее имени файла, от req.body на сервере. Наш пользовательский интерфейс предотвращает дублирование имен файлов, поэтому это хорошо сработало для нас.

const data = new FormData();

files.forEach((file) => {
  data.append('form-key', file);
  data.append(file.name, file.identifier);
});
...