Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » Загрузка файла на сервер средствами XMLHttpRequest

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3

Открыть новую тему     Написать ответ в эту тему

Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sutar

Цитата:
А как на сервере распознать id?  

что мешает его передавать как get параметр?
 

Цитата:
и файлы могут повторятся (одинаковые)), и их нужно все грузить отдельно

javascript то знает, какой именно файл он отдает.

Всего записей: 15112 | Зарегистр. 20-09-2014 | Отправлено: 01:40 18-11-2016
Sutar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Пробовал такие комбинации:

Код:
reader.readAsText(blob, 'UTF-8');
reader.readAsText(blob);

 
Результат:
   
 
Если добавить http.setRequestHeader('Content-Type', 'text/plain;charset=UTF-8'):
   
 
 
Вот результат файла с readAsDataURL() и в PHP base64_decode():
   

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 11:21 19-11-2016 | Исправлено: Sutar, 11:36 19-11-2016
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sutar

Цитата:
readAsTex

как и следует из названия - лучше не использовать, если неизвестна кодировка или речь идет не о текстовых файлах.
 

Цитата:
readAsDataURL

лучший вариант, хоть и создает лишние данные при перекодировке в base64
 

Цитата:
Вот результат файла с readAsDataURL() и в PHP base64_decode():  

ну так сравните какую строку получил js (на коротком примере) и что получил сервер - наверняка где то влпепили лишний перенос или пробел.
http://stackoverflow.com/questions/7431365/filereader-readasbinarystring-to-upload-files
более того, data URL - это НЕ чистый base64 https://ru.wikipedia.org/wiki/Data:_URL

Всего записей: 15112 | Зарегистр. 20-09-2014 | Отправлено: 06:18 20-11-2016 | Исправлено: Mavrikii, 06:41 20-11-2016
Sutar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii

Цитата:
readAsDataURL


Цитата:
data URL - это НЕ чистый base64  

Имеете в виду, что при преобразовании в нормальный вид средствами PHP, нужно обрезать заголовок?

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 23:43 20-11-2016
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sutar

Цитата:
при преобразовании в нормальный вид средствами PHP, нужно обрезать заголовок?

конечно

Всего записей: 15112 | Зарегистр. 20-09-2014 | Отправлено: 23:45 20-11-2016
Sutar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Маленькие файлы (пару байт) передает нормально. Сохраняя кодировку.
Если грузить файл большой файл, первый кусок нормально расшифровывает и т.д., а потом дальше снова кириллица(
 
Добавлено:
И ещё, если во время загрузки XMLHttpRequest() вызвать xnr.abort() - В нашем случае, клиент обрывает соединение и может ещё раз вызвать отправку формы например. Но тут проблема в том, что сервер уже получил запрос, начал его обрабатывать и обработал его до конца. Но ответ клиент не дождался....
В нашем случае, сервер создал файл. Но клиент не знает этого. И повторно посылает запрос на повторное создание файла... И сервер создает его ещё раз. Можно-ли как-то сделать так, чтоб когда клиент обрывал соединение с сервером, сервер так-же переставал дальнейшею обработку запроса?

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 18:28 22-11-2016
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sutar

Цитата:
Если грузить файл большой файл, первый кусок нормально расшифровывает и т.д., а потом дальше снова кириллица(  

вангую, что сделали что то криво. порезали неточно, к примеру.
 

Цитата:
 И повторно посылает запрос на повторное создание файла... И сервер создает его ещё раз

ну, и чем это мешает? сделайте механизм удаления неиспользованных файлов.
ну и есть http://php.net/manual/en/function.connection-aborted.php

Всего записей: 15112 | Зарегистр. 20-09-2014 | Отправлено: 20:40 22-11-2016
igors800

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Уважаю программистов  
 
 

Всего записей: 3 | Зарегистр. 10-12-2016 | Отправлено: 13:33 10-12-2016 | Исправлено: igors800, 13:34 10-12-2016
vs6262



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sutar
 
может пригодится:
 
https://www.html5rocks.com/de/tutorials/file/dndfiles/
https://www.html5rocks.com/en/tutorials/file/dndfiles/
 
https://jsfiddle.net/0GiS0/vTUcd/
 
работает в:
Edge
Chrome
Firefox
Opera
Maxthon
Pale moon
Slimjet
 
не работает в:
IE 11
Safari
 
Добавлено:

Цитата:
https://jsfiddle.net/0GiS0/vTUcd/  

может кто знает как заставить работать в IE 11  ?
 

Всего записей: 2188 | Зарегистр. 25-02-2013 | Отправлено: 18:44 10-12-2016 | Исправлено: vs6262, 19:30 10-12-2016
vs6262



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
fileReader.readAsBinaryString(blob);
 
http://stackoverflow.com/questions/18582643/alternative-to-readasbinarystring-for-ie10
 
вроде бы оно но не могу вставить

Всего записей: 2188 | Зарегистр. 25-02-2013 | Отправлено: 21:15 10-12-2016
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vs6262

Цитата:
fileReader.readAsBinaryString(blob);  

эта функция есть не везде.

Всего записей: 15112 | Зарегистр. 20-09-2014 | Отправлено: 22:30 10-12-2016
vs6262



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
fileReader.readAsBinaryString(blob);  

 
нужно вот этим  
 
var binary = "";
var bytes = new Uint8Array(buffer);
var length = bytes.byteLength;
for (var i = 0; i < length; i++) {
  binary += String.fromCharCode(bytes[i]);
}
 
подменить
 
не получается

Всего записей: 2188 | Зарегистр. 25-02-2013 | Отправлено: 22:34 10-12-2016
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vs6262

Цитата:
не получается

по ссылке же куча примеров. что именно не получается, что такое buffer?

Всего записей: 15112 | Зарегистр. 20-09-2014 | Отправлено: 22:38 10-12-2016
vs6262



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
для IE 10-11
 
Добавлено:

Цитата:
var binary = "";
var bytes = new Uint8Array(blob);  
var length = bytes.byteLength;
for (var i = 0; i < length; i++) {    
  binary += String.fromCharCode(bytes[i]);  
}  
 
fileReader=binary;
 


Всего записей: 2188 | Зарегистр. 25-02-2013 | Отправлено: 22:38 10-12-2016
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vs6262
ну, и что мне этот кусок должен сказать?
что такое blob, зачем переопределять fileReader (объект, видимо) значением бинарной строки?

Всего записей: 15112 | Зарегистр. 20-09-2014 | Отправлено: 22:49 10-12-2016 | Исправлено: Mavrikii, 22:49 10-12-2016
vs6262



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
вот здесь

Цитата:
https://jsfiddle.net/0GiS0/vTUcd/  

 
нухно поменять
fileReader.readAsBinaryString(blob);    
 
вот этим  
   
var binary = "";  
 var bytes = new Uint8Array(buffer);  
 var length = bytes.byteLength;  
 for (var i = 0; i < length; i++) {  
   binary += String.fromCharCode(bytes[i]);  
 }  
 
 
Добавлено:
http://ibnrubaxa.blogspot.de/2012/10/ie10-fileapi.html

Всего записей: 2188 | Зарегистр. 25-02-2013 | Отправлено: 22:59 10-12-2016
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vs6262

Цитата:
Добавлено:  
http://ibnrubaxa.blogspot.de/2012/10/ie10-fileapi.html

ну сделайте так, если хотите.
не понимаю этого зацикливания на бинарном представлении.

Всего записей: 15112 | Зарегистр. 20-09-2014 | Отправлено: 23:13 10-12-2016
vs6262



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Filereader API
 
Подробнее...
 
работает в:  
 Edge  
 Chrome  
 Firefox  
 Opera  
 Maxthon  
 Pale moon  
 Slimjet  
   
не работает в:  
 IE 11  
 Safari  
 
 
Добавлено:
PS: только пример для пакетного вчитывания файлов.
 

Всего записей: 2188 | Зарегистр. 25-02-2013 | Отправлено: 03:33 11-12-2016 | Исправлено: vs6262, 06:06 11-12-2016
Sutar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii

Цитата:
напишите свой вариант сервера - можете принимать целиком, сбрасывая сразу на диск.
[?]
 
Вопрос, если писать свой вариант сервера, это нужно передавать файл по сокету от JS к серверу?
Я хочу попробовать сделать сервер приема файлов на Python, но не понимаю как там сбрасывать всё на диск при загрузке....
Если отправить сразу файл в 1000Гб то в Python файл будет записан на диск только после полного его получения.

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 17:32 12-01-2017
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sutar

Цитата:
это нужно передавать файл по сокету от JS к серверу?  

через что напишите, через то и будет работать. хочется через POST - будет через post, хочется через сокеты - будет через сокеты.

Всего записей: 15112 | Зарегистр. 20-09-2014 | Отправлено: 23:21 26-02-2017
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3

Компьютерный форум Ru.Board » Интернет » Web-программирование » Загрузка файла на сервер средствами XMLHttpRequest


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru