Bvivg
@Bvivg

Как сохранить старое значение для input type file?

у меня есть input type file, при загрузке изображения он летит в базу (в базе он BLOB), так вот, при редактировании у меня во всех других инпутах value="<?php echo isset($user['name']) ? htmlspecialchars($user['name']) : ''; ?>" а с файлом такая система не работает, возможно ли оставить старую картинку? ну то есть представьте человек загрузил пост а там что-то неприемлемое админ это редактирует а там у него картинки нет старой и откуда он ее достанет, и поэтому надо сохранить старую картинку
  • Вопрос задан
  • 262 просмотра
Пригласить эксперта
Ответы на вопрос 3
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
Никак.

Причем в данном конкретном случае это еще и бессмысленно.
Админу не нужна картинка, чтобы отредактировать пост. Она уже загружена, и заново ее загружать просто не имеет смысла.
Ответ написан
delphinpro
@delphinpro Куратор тега PHP
frontend developer
никак этого ни сделать.
Обычно в таких случаях выводят ID уже загруженной картинки из базы плюс возможно сама картинка тегом img или просто ее название. А в бэке уже смотрим, если прилете ID при сохранении то смотрим еще в $_FILES, если там новая картинка, то меняем, иначе просто ничего не трогаем. Если ID не прилетел, значит это первая загруженная картинка, просто ее сохраняем.
Ответ написан
Комментировать
zkrvndm
@zkrvndm
Архитектор решений
Вы можете программно вставить изображение в поле input[type="file"] за пользователя следующим способом:
(async function () {

    // Ссылка на целевое изображение:

    var link = 'https://yousite.ru/image.jpg';

    // Скачиваем изображение, как Blob:

    var blob = await (await fetch(link)).blob();

    // Из ссылки достаем имя файла (он идет после слеша):

    var file_name = new URL(link)['pathname'].replace('/', '');

    // Преобразуем Blob в File используя имя файла и MIME-тип:

    var file = new File([ blob ], file_name, { type: blob.type });

    // При помощи DataTransfer создадим коллекцию файлов FileList с файлом:

    var dt  = new DataTransfer(); dt.items.add(file); var file_list = dt.files;

    // Вставим созданную коллекцию файлов с нашим файлом в input:

    document.querySelector('input[type="file"]').files = file_list;

    // Заставим сработать обработчики изменения на поле вставки, если они есть:

    document.querySelector('input[type="file"').dispatchEvent(new Event('change'));

    // После завершения операции выведем уведомление в консоли:

    console.log('Коллекция файлов вставлена в поле:', file_list);

})();
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
21 нояб. 2024, в 19:31
500 руб./за проект
21 нояб. 2024, в 19:28
200000 руб./за проект