#javascript
Вопрос:
у меня есть приложение на JavaScript, в котором пользователь может загрузить изображение, и оно сохранит его в базе данных после преобразования в строку base64, теперь я хочу, чтобы изображения были сжаты, чтобы они не занимали столько места в БД. вот мой текущий код без сжатия.
this.imgUrl = "";
const imgs = event.target.files;
let imgName = imgs[0].name;
if (imgName.lastIndexOf(".") <= 0) {
//invalid file
} else {
const fileReader = new FileReader();
fileReader.addEventListener("load", () => {
this.imgUrl = fileReader.resu<
});
fileReader.readAsDataURL(imgs[0]);
}
Я хотел бы услышать ваши мысли. (Кстати, используя Vue)
Спасибо!
Комментарии:
1. Моя первая мысль заключается в том, что это зависит от используемой вами базы данных. MySQL предоставляет тип столбца, который принимает строки в кодировке base64. Моя следующая мысль заключается в том, что base64 всегда будет прибавлять в весе. Вы должны изучить возможность сохранения изображения в виде двоичных данных (большой двоичный объект)
2. Изображения уже сжаты; повторное сжатие их на стороне клиента трудно и не стоит делать это в качестве первого шага по сравнению с тем, чтобы избегать base64. Как сказал code_monk, вы должны хранить двоичные данные непосредственно в своей базе данных.
3. Я думаю, что это также зависит от типа изображения и сервера, который вы используете. Я бы подумал, что вы загрузите исходное изображение, выполните сжатие, а затем сохраните результат в виде большого двоичного объекта. Затем преобразуйте его в base64 при получении изображения из БД. Более важный вопрос заключается в том, какова ваша общая проблема, которую вы пытаетесь решить?
4. Я отвечу на несколько вопросов. Я использую PostgreSQL, и моя серверная сторона-Spring. главная проблема в том, что мои ответы становятся очень большими из-за изображений, которые я отправляю. в настоящее время я сохраняю изображение в виде строки, которая может быть глупой, но это потому, что я также могу сохранять в этом столбце ссылки на изображения из Интернета.
5. Сохраните их в отдельной колонке…