Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
52 / 5 / 1
Регистрация: 11.09.2018
Сообщений: 317

Ошибка Blob constructor: Argument 2 can't be converted to a dictionary

08.09.2022, 13:00. Показов 1057. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребята, здравствуйте. При попытке добавить файл в список input[type = 'file'] получаю в консоли ошибку:

Blob constructor: Argument 2 can't be converted to a dictionary.

Код
JavaScript
1
2
3
4
5
6
7
8
9
10
11
function File_Collection(arr){
    const dt  = new DataTransfer();
    
    for(let i = 0; i < arr.length; i++){
      let info = arr[i][1]; 
      dt.items.add(new Blob([info], arr[i][0], {type: 'image/jpeg'}));
      var file_list = dt.files;     
    }
    
    document.getElementById('foto_file').files = file_list;
  }
arr[i][0] - имя файла
arr[i][1] - объект base64

Я ранее не работал с Blob, возможно где-то наитупейшая ошибка в синтаксисе (в 6-й строке).
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.09.2022, 13:00
Ответы с готовыми решениями:

Variable argument of type float is converted to a?
Есть вопрос из теста, ВООБЩЕ не понимаю, в чем вопрос и какой ответ. Кто понимает поясните пожалуйста You have written the following...

Ошибка компиляции "no instance of constructor 'std::thread::thread' matches the argument list"
Не могу сообразить почему возникает ошибка. У меня в классе есть метод, который должен работать в нескольких потоках одновременно. Вот он: ...

Ошибка Constructor call must be the first statement in a constructor
У меня есть вот такой код, приведённый ниже. На строке super() оно выдаёт ошибку и пишет &quot;Constructor call must be the first statement...

6
52 / 5 / 1
Регистрация: 11.09.2018
Сообщений: 317
09.09.2022, 07:57  [ТС]
Никто не отвечает

Попробовал переписать вот так:

JavaScript
1
dt.items.add(new Blob([info], {type: 'image/jpeg'}));
Теперь другая ошибка: Uncaught TypeError: DataTransferItemList.add: Argument 1 does not implement interface File.
0
Эксперт JS
 Аватар для DrType
6553 / 3624 / 1075
Регистрация: 07.09.2019
Сообщений: 5,877
Записей в блоге: 1
09.09.2022, 09:39
Цитата Сообщение от Artiom-1984 Посмотреть сообщение
добавить файл в список input[type = 'file']
Насколько знаю, браузер не даст этого сделать. input[type = 'file'] только для чтения.
0
Эксперт JS
2463 / 1769 / 625
Регистрация: 11.07.2016
Сообщений: 4,067
09.09.2022, 10:08
Artiom-1984, что вы пытаетесь сделать? Какая конечная цель?
0
52 / 5 / 1
Регистрация: 11.09.2018
Сообщений: 317
09.09.2022, 10:51  [ТС]
DrType, Да прямо уж! Без проблем меняю коллекцию файлов.

Добавлено через 14 минут
balannar, как бы объяснить...

В общем админка интернет-магазина. И к товаром нужно прикреплять фото. Не обязательно одно, можно несколько.

Действительно, есть input

HTML5
1
<input type="file" name="photo[]" multiple accept="image/jpeg" id = "foto_file">
Он невидим, и связанная с ним label стилизована под кнопку.

Даляя на JS добавляю блоки с картинками

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
const FILE = [];
  const temp_FILE = [];
  $('#foto_file').on('change', function(){
      
    let fr = [];
    for(let i = 0; i < this.files.length; i++){
        if (this.files[i]) {
            temp_FILE[i] = [];
            let fileName = this.files[i].name;
            temp_FILE[i][0] = fileName;
            fr[i] = new FileReader();
            
            fr[i].addEventListener("load", function(){
                temp_FILE[i][1] = fr[i].result;
                $('.foto_string').append('<div class = "foto_unit"><img src = "'+ fr[i].result + '" alt = "" width = "100px" class = "foto_img"/><p class = "foto_del" id = "' + fileName + '">Удалить</p></div>');
            }, false);
            
            
            fr[i].readAsDataURL(this.files[i]);
       
        }
    }
 
    
        
    Array.prototype.push.apply(FILE, temp_FILE);
    
   
     console.log(FILE);
     File_Collection(FILE);
Далее функция File_Collection (вот она и проблемная)

JavaScript
1
2
3
4
5
6
7
8
9
10
11
function File_Collection(arr){
    const dt  = new DataTransfer();
    
    for(let i = 0; i < arr.length; i++){
      let info = arr[i][1]; 
      dt.items.add(new Blob([info], {type: 'image/jpeg'}));
      var file_list = dt.files;     
    }
    
    document.getElementById('foto_file').files = file_list;
  }
Если добавляю один файл, то все ОК. если одновременно несколько, то тоже все без проблем отправляется на сервер. но если выберу нресколько, а потом добавлю еще один, то отправляется только последний.

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

В консоле ошибка появляется в любом случае, даже если все отправилось.


В итоге, мне нужно не просто один раз выбрать несколько фото, а чстобы была возможность перед отправкой добавить, в будущем и удалить.
0
Эксперт JS
2463 / 1769 / 625
Регистрация: 11.07.2016
Сообщений: 4,067
09.09.2022, 13:52
Лучший ответ Сообщение было отмечено Artiom-1984 как решение

Решение

Цитата Сообщение от Artiom-1984 Посмотреть сообщение
если выберу нресколько, а потом добавлю еще один, то отправляется только последний
Может всё дело в том, что вы затираете предыдущие файлы новой коллекцией в этом месте?
JavaScript
10
document.getElementById('foto_file').files = file_list;
Добавлено через 17 минут
https://codepen.io/Balanaar/pen/RwyaGYp
HTML5
1
<input type="file" multiple>
JavaScript
1
2
3
4
5
6
7
8
const dt = new DataTransfer();
const input = document.querySelector('input');
input.addEventListener('change', e => {
  for (let file of e.target.files)
    dt.items.add(file);
  input.files = dt.files;
  alert([...input.files].map(e => e.name).join('\n'));
});
Обработчик добавления одних и тех же файлов думаю сами осилите
1
52 / 5 / 1
Регистрация: 11.09.2018
Сообщений: 317
09.09.2022, 16:02  [ТС]
Balanaar, получилось! Все супер! Благодарю!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.09.2022, 16:02
Помогаю со студенческими работами здесь

Ошибка "E0309 more than one instance of constructor "Myclass::Myclass" matches the argument list"
Видает такую ошибку Severity Code Description Project File Line Suppression StateError (active) E0309 more than one instance of constructor...

Ошибка компиляции "no instance of constructor "MemReader::MemReader" matches the argument list"
Добрый день. При написании класса поиска определённого процесса столкнулся с ошибкой: &quot;E0289 no instance of constructor...

Ошибка: Syntax error, "=" constructor but constructor found
Пытался найти решение, но нашел только одну подобную тему и ее решением было убрать '';'' после ''class'', но у меня и так нет...

Ошибка: not all arguments converted during string formatting
Доброго времени суток, решаю задачу &quot;Вы должны написать функцию, которая принимает положительное целое число и возвращает: &quot;Fizz...

Ошибка Dexter: MusicFragment cannot be converted to Activity
Ребят, подскажите пожалуйста, как исправить ошибоку. У меня есть фрагмент MusicFragment и есть в layout fragment_music. Ошибка с Dexter, а...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru