Вот как вы можете получить файл в q-uploader в строку base64. Оттуда вы сможете понять, как вставить эту строку в вашу базу данных.
1) Добавить имя ссылки в q-uploader. (Я использую "файлы")
<q-uploader ref="files" label="My Label" :additional-fields="[{name: 'name', value: 'value'}]" multiple/>
2) Теперь вы можете в любое время получить файлы в q-uploader, используя
this.$refs.files.files
3) Создайте следующие две функции. Это самый краткий и простой способ, который я нашел для преобразования файла JavaScript в base64.
async encodeToBase64(files) {
var attach = [];
var reader = [];
// loop through each of the files in q-uploader
for (let i = 0; i < files.length; i++) {
attach[i] = await this.singleFileToBase64(i, files, reader)
}
// returns an array of all the files in base64 format
return attach;
},
singleFileToBase64(i, files, reader) {
reader[i] = new FileReader();
// read the file into a base64 format
reader[i].readAsDataURL(files[i]);
return new Promise((resolve, reject) => {
reader[i].onerror = () => {
reader[i].abort();
reject("Insert error message here")
};
// return the base 64 string
reader[i].onload = function () {
resolve(reader[i].result);
};
})
},
Примечание. Использование async, await и обещания являются ключевыми здесь. В противном случае файл reader.onload может не запуститься до того, как вы попытаетесь использовать вывод.
4) Вызовите свою функцию, используя код из шага 2
encodeToBase64(this.$refs.files.files)
Примечание: я написал это, чтобы отразить наличие нескольких файлов в q-uploader, поскольку с асинхронностью, ожиданием и обещаниями может быть сложно разобраться.
Примечание: я мог бы, вероятно, избавиться от массива reader и просто объявить его как обычный считыватель в методе singleFileToBase64
... но я не проверял это.