
23.12.2015, 14:40
|
Профессор
|
|
Регистрация: 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, после того, как загружу его в браузер. Т.е. разбираю файл, загружаю в браузер и начинаю отправку. Но не могу передать название. Подскажите, как это сделать.
|
|

23.12.2015, 15:41
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
fData.append(this.name, this.files[i]);
это все что нужно, имя файла (файлов, если мультизагрузка) и другие его параметры будут переданы.
А это
reader.readAsDataURL(this.files[i]);
совсем не обязательно.
Последний раз редактировалось laimas, 23.12.2015 в 15:43.
|
|

23.12.2015, 17:08
|
Профессор
|
|
Регистрация: 15.08.2012
Сообщений: 285
|
|
readAsDataURL нужен, чтобы предварительно показать изображения, которое загружаются. Т.е. изображение загрузилось в браузер, я уже начинаю отправку сразу или вручную. Но изображение туда передаются уже в виде data url, а сослаться на изображение в виде this.files[i], я не могу, так как цикл уже обработан и var i = последнему номеру из массива файлов
|
|

23.12.2015, 17:13
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от platedz
|
readAsDataURL нужен, чтобы предварительно показать изображения
|
Показывайте, но для передачи его на сервер в данном случае оно не требуется. А функция должна обрабатывать элементы формы, и если передается и файл, то и их, а чтобы передать надо передать имя поля (ключ) и указать ссылку на файл (files[index]), все, остальное браузер без вашего участия сделает. Что лень отправить и проверить?
|
|

23.12.2015, 17:25
|
Профессор
|
|
Регистрация: 15.08.2012
Сообщений: 285
|
|
files[index] я хочу сформировать строку прогресса. А для того, чтобы сделать прогресс бар, мне нужно сформировать некий div блок, где будет название изображение, само изображение, строка прогресса и тд. А блок этот я формирую уже вместе с изображением.
Соответственно изображение в виде data url загружается в браузер, когда оно загрузилось я создаю div-блок с вышеописанным делом и в ней уже также и прогресс бар. И чтобы мне ссылаться на этот прогресс бар, мне нужно его сначала создать, а потом уже отправить изображение. И все это последовательно по порядку. Но index в files[index] не передается, когда он в reader.onload, так как цикл завершен и он имеет уже последнее значение, т.е если я выбрал 4 файла то он будет равен 4 во всех четырех случаях. И мне нужно этот index как-то корректно передать в reader.onload.
|
|

23.12.2015, 17:36
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Чего-то вы напутали - FileReader можно запустить для предварительного просмотра, где можно также организовать отображение процесса его чтения с диска (хотя это может быть и мгновение), и FileReader обладает своими событиями позволяющими отобразить процесс. Предварительный просмотр во время отправки формы, это нонсенс.
Собственно в процессе чтения с диска можно уже запомнить параметры выбранных изображений.
Отправка формы, это уже некий общий процесс, XMLHttpRequest, который также обладает своими событиями, которые позволяют отобразить процесс загрузки формы, и имена также доступны из коллекции файлов поля file, если не охота использовать ранее полученное. Но работать будет уже FormData, какое отношение к этому имеет FileReader?
|
|

23.12.2015, 21:48
|
Профессор
|
|
Регистрация: 15.08.2012
Сообщений: 285
|
|
Ну в первом сообщении же есть код.
Видно же по нему я сначала читаю изображение с помощью FileReader, а в нем уже в методе onload, когда это изображение уже можно выводить на экран, я вывожу его на экрам, вместе с блоком, который буду использовать для прогресс бара, отправляю его с помощью XMLHttpRequest, чтобы потом уже с помощью xhrS.upload.onprogress изменять значения прогресс бара, который создается непосредственно уже после выполнения FileReader.onload
Последний раз редактировалось platedz, 23.12.2015 в 22:01.
|
|

24.12.2015, 05:52
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Ну так комментарий к коду какой? Я вас спрашиваю - причем тут FileReader, если коллекция files содержит и имена каждого файла выбранного для загрузки? Какая проблема их получать...
|
|

24.12.2015, 10:14
|
Профессор
|
|
Регистрация: 15.08.2012
Сообщений: 285
|
|
i не передается здесь fData.append("name",tfiles.files[i]);
|
|

24.12.2015, 13:00
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Еще раз тот же самый вопрос - нахрена вам FileReader во время отправки формы?
|
|
|
|