Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.12.2015, 14:40
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

Как в FileReader передать название файла!
Подскажите, пожалуйста.
Делаю так,
for(var i = 0; i<this.files.length; i++)
		{
			var tfiles = this.files;
			if(window.FileReader ) 
			{
				var reader = new FileReader();
				reader.onload = function(e) 
				{
					var xhrS = new XMLHttpRequest();
					var fData = new FormData();
					
				       fData.append("name",tfiles.files[i]);
					fData.append("file",e.target.result);
					

						
					xhrS.onreadystatechange = function()
					{
						console.log(xhrS.responseText);
                                        }
								
				
					xhrS.open("POST", "./filel.php", true);
					xhrS.send(fData);
										
					
				}
				reader.readAsDataURL(this.files[i]);
				
			}
		}


Пытаюсь отправить файл в виде data url, после того, как загружу его в браузер. Т.е. разбираю файл, загружаю в браузер и начинаю отправку. Но не могу передать название. Подскажите, как это сделать.
Ответить с цитированием
  #2 (permalink)  
Старый 23.12.2015, 15:41
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

fData.append(this.name, this.files[i]);

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

А это

reader.readAsDataURL(this.files[i]);

совсем не обязательно.

Последний раз редактировалось laimas, 23.12.2015 в 15:43.
Ответить с цитированием
  #3 (permalink)  
Старый 23.12.2015, 17:08
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

readAsDataURL нужен, чтобы предварительно показать изображения, которое загружаются. Т.е. изображение загрузилось в браузер, я уже начинаю отправку сразу или вручную. Но изображение туда передаются уже в виде data url, а сослаться на изображение в виде this.files[i], я не могу, так как цикл уже обработан и var i = последнему номеру из массива файлов
Ответить с цитированием
  #4 (permalink)  
Старый 23.12.2015, 17:13
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от platedz
readAsDataURL нужен, чтобы предварительно показать изображения
Показывайте, но для передачи его на сервер в данном случае оно не требуется. А функция должна обрабатывать элементы формы, и если передается и файл, то и их, а чтобы передать надо передать имя поля (ключ) и указать ссылку на файл (files[index]), все, остальное браузер без вашего участия сделает. Что лень отправить и проверить?
Ответить с цитированием
  #5 (permalink)  
Старый 23.12.2015, 17:25
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

files[index] я хочу сформировать строку прогресса. А для того, чтобы сделать прогресс бар, мне нужно сформировать некий div блок, где будет название изображение, само изображение, строка прогресса и тд. А блок этот я формирую уже вместе с изображением.
Соответственно изображение в виде data url загружается в браузер, когда оно загрузилось я создаю div-блок с вышеописанным делом и в ней уже также и прогресс бар. И чтобы мне ссылаться на этот прогресс бар, мне нужно его сначала создать, а потом уже отправить изображение. И все это последовательно по порядку. Но index в files[index] не передается, когда он в reader.onload, так как цикл завершен и он имеет уже последнее значение, т.е если я выбрал 4 файла то он будет равен 4 во всех четырех случаях. И мне нужно этот index как-то корректно передать в reader.onload.
Ответить с цитированием
  #6 (permalink)  
Старый 23.12.2015, 17:36
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Чего-то вы напутали - FileReader можно запустить для предварительного просмотра, где можно также организовать отображение процесса его чтения с диска (хотя это может быть и мгновение), и FileReader обладает своими событиями позволяющими отобразить процесс. Предварительный просмотр во время отправки формы, это нонсенс.

Собственно в процессе чтения с диска можно уже запомнить параметры выбранных изображений.

Отправка формы, это уже некий общий процесс, XMLHttpRequest, который также обладает своими событиями, которые позволяют отобразить процесс загрузки формы, и имена также доступны из коллекции файлов поля file, если не охота использовать ранее полученное. Но работать будет уже FormData, какое отношение к этому имеет FileReader?
Ответить с цитированием
  #7 (permalink)  
Старый 23.12.2015, 21:48
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

Ну в первом сообщении же есть код.

Видно же по нему я сначала читаю изображение с помощью FileReader, а в нем уже в методе onload, когда это изображение уже можно выводить на экран, я вывожу его на экрам, вместе с блоком, который буду использовать для прогресс бара, отправляю его с помощью XMLHttpRequest, чтобы потом уже с помощью xhrS.upload.onprogress изменять значения прогресс бара, который создается непосредственно уже после выполнения FileReader.onload

Последний раз редактировалось platedz, 23.12.2015 в 22:01.
Ответить с цитированием
  #8 (permalink)  
Старый 24.12.2015, 05:52
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Ну так комментарий к коду какой? Я вас спрашиваю - причем тут FileReader, если коллекция files содержит и имена каждого файла выбранного для загрузки? Какая проблема их получать...
Ответить с цитированием
  #9 (permalink)  
Старый 24.12.2015, 10:14
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

i не передается здесь fData.append("name",tfiles.files[i]);
Ответить с цитированием
  #10 (permalink)  
Старый 24.12.2015, 13:00
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Еще раз тот же самый вопрос - нахрена вам FileReader во время отправки формы?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как передать значение в функцию в переменную с нужным именем? bratkovsky Общие вопросы Javascript 1 12.10.2015 08:18
Как передать данные в другую панель из выбранной строки таблицы. layout: 'card'. Пролетарий ExtJS 5 03.06.2015 22:53
Как передать 2 значения в скрипт? useruser jQuery 1 07.10.2014 11:32
Как узнать битрейт mp3 файла? Dimaz Общие вопросы Javascript 0 26.09.2014 16:40
Как узнать какие ошибки произошли при парсинге xml файла faunder Events/DOM/Window 0 12.09.2008 14:17