powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Как передать файл с помощью JavaScript
61 сообщений из 61, показаны все 3 страниц
Как передать файл с помощью JavaScript
    #38905896
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ, подскажите, как можно с помощью JavaScript передать файл на сокет. На счет картинки понятно - ее можно передать с помощью base64, а как файл?
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38905923
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а кто мешает использовать base64
картинка от файла ничем не отличается...
data:application/bin;base64,....
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38905943
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А ограничения на размер файла есть?
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38905961
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qi_ip,
есть , но это надо смотреть настройки сервера
но и в это случае никто не мешает передавать файл по частям
смотри file API
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38928170
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Опять же возвращаюсь к вопросу передачи файлов/картинок через JS и Base64.
Передача на страницу картинок/файлов закодированных в Base64 небольших размеров осуществить не сложно. Проблема возникает при передачи файлов закодированных в Base64 больших размеров именно через JS (проблема с оперативной памятью).
Подскажите,
1) Как отобразить изображение на сайте большого размера? Если все сразу вытащить в переменную на страницу, браузер выкидывает "Out of memory".
2) То же самое с файлом большого размера.

Я так понимаю, можно как-то частями выгружать?
Можно ли через JS при нажатии на ссылку загрузки файла сначала открывалось окно выбора места сохранения файла, а уже потом начиналась конвертации Base64 в файл побайтно? Закодированную строку получаю из базы данных.

PS: просьба сильно не пинать, так как только начинаю в этом разбираться. Если не сложно, то киньте ссылки на примеры или в каком направлении двигаться.

Спасибо!
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38928249
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38930143
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На счет FileAPI понятно, но это можно использовать, когда файл уже есть. А я имел в виду именно получение и создание большого бинарного файла. То есть, файл нужно собрать из присланных данных.
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38930287
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
из данныз формируешь блобы , соединяешь их, применяешь base64. передаешь на сервер.
а в общем не понятно задание- что и откуда получается, и что и куда передается.
в постах противоричивые данные...
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38930345
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так, полная тема:

Есть WebSocket, по нему в JS получаю файл (base64). Как его можно правильно преобразовать в большой файл (blob) на стороне клиента. С небольшими файлами проблем не возникает, но при больших файлах (> 20 МБ) браузер крешится при конверте Base64 в Blob.

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

Как вариант для хранения сконвертированного файла рассматривал сохранение в IndexedDb.

Если коротко, то нужно получить большой файл по вебсокету (формат Base64), преобразовать на стороне клиента в файл (Blob) и отдать пользователю.

Вот, как-то так.
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38930424
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я вот таким образом получаю файл по websocket
p - это и есть строка base64

Код: javascript
1.
2.
3.
 $('#download').attr('href', p);
 document.getElementById('download').click();
<a href="" download="xxx.xlsx" id="download" ></a>


правда, у меня файлы не большие...
вот пример использования blob для формирования строки для передачи по websocket на сервер
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
var x = [];
 x.push('xxx03|full');
 x.push($(current_goods).attr('data-id'));
 x.push(s[0]);
var blob = new Blob([x.join('®')], {type: 'application/bin'});
var shorts = new Uint16Array(1);
shorts[0] = blob.size;
 var d = new Blob([shorts, blob, getBlob(img_tmp.shift())], {type: 'application/bin'});


для тебя будет интересна последняя строка - собрать один blob из нескольких....
но при больших передачах крашиться может из-за ограничения по объёму разовой передачи по websocket
у меня - 16мег стоит.
но websocket может передавать и бинарные файлы - сокращение трафика и времени на передачу
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38930446
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадяя вот таким образом получаю файл по websocket
p - это и есть строка base64

Код: javascript
1.
2.
3.
 $('#download').attr('href', p);
 document.getElementById('download').click();
<a href="" download="xxx.xlsx" id="download" ></a>


правда, у меня файлы не большие...
вот пример использования blob для формирования строки для передачи по websocket на сервер
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
var x = [];
 x.push('xxx03|full');
 x.push($(current_goods).attr('data-id'));
 x.push(s[0]);
var blob = new Blob([x.join('®')], {type: 'application/bin'});
var shorts = new Uint16Array(1);
shorts[0] = blob.size;
 var d = new Blob([shorts, blob, getBlob(img_tmp.shift())], {type: 'application/bin'});


для тебя будет интересна последняя строка - собрать один blob из нескольких....
но при больших передачах крашиться может из-за ограничения по объёму разовой передачи по websocket
у меня - 16мег стоит.
но websocket может передавать и бинарные файлы - сокращение трафика и времени на передачу


То есть, можно на стороне клиента получать бинарный файл? А как его обработать? Опять же получается. что все будет накапливаться в оперативке и при большом файле опять же крешниться.
Есть какие-то нюансы при передачи/получении через WebSocket на клиент бинарный файл?
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38930453
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qi_ipТак, полная тема:

Есть WebSocket, по нему в JS получаю файл (base64). Как его можно правильно преобразовать в большой файл (blob) на стороне клиента. С небольшими файлами проблем не возникает, но при больших файлах (> 20 МБ) браузер крешится при конверте Base64 в Blob.

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

Как вариант для хранения сконвертированного файла рассматривал сохранение в IndexedDb.

Если коротко, то нужно получить большой файл по вебсокету (формат Base64), преобразовать на стороне клиента в файл (Blob) и отдать пользователю.

Вот, как-то так.зачем этот гемор?

почему нельзя просто так взять



и дать пользователю ссылку на скачивание?

а браузер правильно крашится. нефиг втихаря забивать мне localStorage всяким многогигабайтным гуано, hdd не резиновый и не казенный.
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38930460
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariyqi_ipТак, полная тема:

Есть WebSocket, по нему в JS получаю файл (base64). Как его можно правильно преобразовать в большой файл (blob) на стороне клиента. С небольшими файлами проблем не возникает, но при больших файлах (> 20 МБ) браузер крешится при конверте Base64 в Blob.

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

Как вариант для хранения сконвертированного файла рассматривал сохранение в IndexedDb.

Если коротко, то нужно получить большой файл по вебсокету (формат Base64), преобразовать на стороне клиента в файл (Blob) и отдать пользователю.

Вот, как-то так.зачем этот гемор?

почему нельзя просто так взять



и дать пользователю ссылку на скачивание?

а браузер правильно крашится. нефиг втихаря забивать мне localStorage всяким многогигабайтным гуано, hdd не резиновый и не казенный.
Связь только по Websocket, поэтому не получается просто взять и дать пользователю.
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38930481
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для нормального приёма бинарника нужна вторая строка
Код: javascript
1.
2.
con = new WebSocket("wss:..........");
con.binaryType = "arraybuffer";


она не влияет на прём текстовых данных.

в моём примере нет необходимости связавыться с blob.
проверь, может и для длинных файлов подойдет
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38930489
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qi_ipСвязь только по Websocket, поэтому не получается просто взять и дать пользователю.Для того, чтобы был вебсокет, сначала должен быть http.

Для установления соединения WebSocket клиент и сервер используют протокол, похожий на HTTP. Клиент формирует особый HTTP-запрос, на который сервер отвечает определенным образом. Куда девается HTTP?

И вообще, единственный способ создать большой файл браузером — скачать его. Без вариантов (не считая ADODB.Stream).
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38930501
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну ещё можно вспомнить про WebDAV
https://github.com/sara-nl/js-webdav-client
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38930506
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот описание по работе с файлами
http://habrahabr.ru/post/112286/
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38930525
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадявот описание по работе с файлами
http://habrahabr.ru/post/112286/ а ты его читал?
С помощью FileSystem API и File API веб приложение может создавать, читать, просматривать и записывать файлы находящиеся в области пользовательской «песочницы».размер песочницы - 5 мб. даже в память ТС загружает больше.
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38930555
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и кроме того только для хрома :)
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38930568
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qi_ipСвязь только по Websocket
это чтоб сложнее было? ))
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38930569
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123qi_ipСвязь только по Websocket
это чтоб сложнее было? ))
Тут я ничего не могу поделать - такие условия выполнения. Поэтому тут на форуме темку создал, чтобы узнать, как сделать :)
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38930608
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://updates.html5rocks.com/2011/08/Saving-generated-files-on-the-client-side
там же ссылка https://github.com/eligrey/FileSaver.js
а это пробовал?

Код: javascript
1.
2.
3.
 $('#download').attr('href', p);
 document.getElementById('download').click();
<a href="" download="xxx.xlsx" id="download" ></a>
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38930629
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Там используются уже готовые бинарные объекты...а я еще до бинарника не дошел, так как застопорился на создании самого бинарника из Base64
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38930631
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123qi_ipСвязь только по Websocket
это чтоб сложнее было? ))

ну через websocket много решается намного проще, чем через ajax
особенно мне понравилось такая картинка
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38930639
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qi_ipТам используются уже готовые бинарные объекты...а я еще до бинарника не дошел, так как застопорился на создании самого бинарника из Base64
в моём варианте бинарник не используется!
если у тебя приходит base64, сделанный из бинарника надо добавить в начало data:application/bin;base64,
и все подставить вместо p
data:application/bin;base64, - лучше добавить на сервере(если есть такая возможность, у меня так сделано)
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38930648
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как вариант частями создавать бинарник, но что-то JS не дает возможность дописывать в BLOB
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38930658
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот же добавление в blob
Код: javascript
1.
var d = new Blob([shorts, blob, getBlob(img_tmp.shift())], {type: 'application/bin'});
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38930660
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
причем бинарники
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38930675
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: javascript
1.
var d = new Blob([shorts, blob, getBlob(img_tmp.shift())], {type: 'application/bin'});


Если не сложно, можно поподробнее:
blob - ранее созданный бинарник
shorts и getBlob(img_tmp.shift()) - тоже все бинарники?
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38930720
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот полный код использования
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
var x = [];
 x.push('xxx03|full');
 x.push($(current_goods).attr('data-id'));
 x.push(s[0]);
var blob = new Blob([x.join('®')], {type: 'application/bin'});   -- создание blod из "массива"
var shorts = new Uint16Array(1); -- создание массива из 1 значения, определённого размера  - 2 байта
shorts[0] = blob.size; -- запись длины , чтоб было занять 2 байта, даже для коротких данных
 var d = new Blob([shorts, blob, getBlob(img_tmp.shift())], {type: 'application/bin'});  -- "сложение blob" , по факту преобразование array в blob, с заданием типа


фактически можно получать base64 и записывать в массив
Код: javascript
1.
2.
3.
4.
 x.push(base64_0);
 x.push(base64_1);
 x.push(base64_2);
....


потом
Код: javascript
1.
var d_blob= new Blob([x.join('')], {type: 'application/bin'});
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38930747
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
getBlob(img_tmp.shift())
img_tmp - у меня массив с картинкам
и этот код в цикле пербирает (извлекая из массива) все картинки для передачи на сервер по websocket в бинарном виде
[shorts, blob, - это информационная часть длина команды и сама команда - для обработки полусенного на сервере
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38930753
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяну через websocket много решается намного проще, чем через ajax
мы же не про "много" говорим, а про скачку и докачку больших файлов.
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38930769
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123вадяну через websocket много решается намного проще, чем через ajax
мы же не про "много" говорим, а про скачку и докачку больших файлов.всем, похоже, пофиг, что в оперативку можно напихать максимум 20 мб (согласно экспериментам ТС), а записать на диск 5 (согласно настройкам).
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38930772
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я предложил варианты
Код: javascript
1.
2.
3.
 $('#download').attr('href', p);
 document.getElementById('download').click();
<a href="" download="xxx.xlsx" id="download" ></a>



и чуть выше
ноад попробовать для больших файлов.
сюда
<a href="" download="xxx.xlsx" id="download" ></a>
в href можно подставить и бинарные данные.
также можно и подставить ссылку на файл, если он есть на сервере.
в моём случае создаются файл экселя и не сохраняясь на сервере ("из памяти") передаются клиенту
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38930784
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторвсем, похоже, пофиг, что в оперативку можно напихать максимум 20 мб (согласно экспериментам ТС),
я б своим способом попробовал, но у меня маленькие файлы и ограничения дл websocket 16мег
16мег я могу изменять, но для формирования большого файла нет желания возиться....
поэтому и прошу qi_ip проверить.
вдруг потребуется.
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38930793
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за вариант...буду пробовать :)
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38931423
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем попробовал собрать картинку...при сборе второй картинке пишет, что изображение повреждено.
Код приложил.
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38931623
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я не понял чего ты добивался
у меня так всё нормально
Код: html
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.
31.
32.
33.
34.
<!DOCTYPE html>
<html>
    <head lang="en">
        <meta charset="UTF-8">
        <title></title>
        <script src="jquery.js" type="text/javascript"></script>
    </head>
    <body>
        <script>
            $(document).ready(function () {

                var test2_1 = "/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAEBAQEBAQEBAQE..............
                var test2_2 = "1LULhpHLM7ySzNLNKFhVYyoyqLjAJ+j/HX7OPx/wDgRpHhL............

                test2_1 = test2_1 + test2_2;

                var binary_01 = atob(test2_1);
                var len_01 = binary_01.length;
                var buffer_01 = new ArrayBuffer(len_01);
                var view_01 = new Uint8Array(buffer_01);
                for (var i = 0; i < len_01; i++) {
                    view_01[i] = binary_01.charCodeAt(i);
                }
                var blob_01 = new Blob([view_01], {type: "image/jpeg"});
                var blobUrl_01 = URL.createObjectURL(blob_01);
                $('#pict_01').attr('src', blobUrl_01);


            });
        </script>
        <img id="pict_01" src="" style="max-width: 100%"/>

    </body>
</html>
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38931734
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я хотел создать два блоба из двух частей, соединить их и вывести изображение :)
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38931884
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
гыыы
читайте первоисточники
делить строку base64 для нормльного использования в дальнейшем надо на части длина которых кратна 3

в своём приере из первой строки последние 2 символа перенеси в начало второй строи и будет тебе счастьё
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38933502
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у тебя что за файлы - картинки или?
для сохранения файла я предложил код
17489035
ты его пробывал?
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38933508
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадяты его пробывал?
Я еще до этого не дошел. Сейчас делаю так: в одной js получаю побайтно код в base64, а blob по частям собираю в другом. Поэтому мне нужно между переходами между двумя этими файлами сохранять ранее созданный блоб, чтобы потом дописать в него.

То есть, получается, что получаю в первом JS файле строку, передаю в другой JS. Там формирую блоб, генерирую ссылку на блоб через URL.createObjectURL, потом обратно возвращаю новую порцию Base64 и ссылку URL.createObjectURL на предыдущий блоб. И так по кругу, пока не закончится поток Base64
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38933509
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И поэтому мне нужно во втором файла заново вытаскивать BLOB.
Пробовал через XMLHttpRequest, но почему-то в переменную BLOB не сохраняет.

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
        var binary_01 = atob(test2_1);
        var len_01 = binary_01.length;
        var buffer_01 = new ArrayBuffer(len_01);
        var view_01 = new Uint8Array(buffer_01);
        for (var i = 0; i < len_01; i++) {
            view_01[i] = binary_01.charCodeAt(i);
        }
        var blob_01 = new Blob([view_01], {type: "image/jpeg"});
        var blobUrl_01 = URL.createObjectURL(blob_01);
        $('#pict_01').attr('src', blobUrl_01);


        var oReq = new XMLHttpRequest();
        oReq.open("GET", blobUrl_01, true);
        oReq.responseType = "blob";
        oReq.send();
        oReq.onload = function(oEvent) {
            var blob = oReq.response;
            blob_002 = blob; <==== ВОТ ТУТ ПОЧЕМУ-ТО НЕ ИДЕТ ПРИСВАИВАНИЕ!
            // ...
        };
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38933510
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а нафига такой изврат?
какая у тебя конечная цель?
передать большой файл по-частям?
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38933512
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все та же, что и раньше - собрать один большой файл и отдать пользователю.
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38933516
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как у тебя организована работа с websocket?
создай массив
var v=[]
получение каждой паски base64 заноси в массив
v.push(строка base64)
потом
$('#download').attr('href', p);
document.getElementById('download').click();
<a href="" download="xxx.xlsx" id="download" ></a>
и всё
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38933519
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
$('#download').attr('href', p);
заменить
$('#download').attr('href', v.join('');
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38933521
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
$('#download').attr('href', v.join(''));
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38933523
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
При слишком больших файлах в лимит массива не упрусь? Оператива большой массив выдержит?
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38933527
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не упрёшься , проверь.
файлы какой длины?
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38933529
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Больше 50 мб
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38933532
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qi_ipИ поэтому мне нужно во втором файла заново вытаскивать BLOB.
Пробовал через XMLHttpRequest, но почему-то в переменную BLOB не сохраняет.

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
        var binary_01 = atob(test2_1);
        var len_01 = binary_01.length;
        var buffer_01 = new ArrayBuffer(len_01);
        var view_01 = new Uint8Array(buffer_01);
        for (var i = 0; i < len_01; i++) {
            view_01[i] = binary_01.charCodeAt(i);
        }
        var blob_01 = new Blob([view_01], {type: "image/jpeg"});
        var blobUrl_01 = URL.createObjectURL(blob_01);
        $('#pict_01').attr('src', blobUrl_01);


        var oReq = new XMLHttpRequest();
        oReq.open("GET", blobUrl_01, true);
        oReq.responseType = "blob";
        oReq.send();
        oReq.onload = function(oEvent) {
            var blob = oReq.response;
            blob_002 = blob; <==== ВОТ ТУТ ПОЧЕМУ-ТО НЕ ИДЕТ ПРИСВАИВАНИЕ!
            // ...
        };


А тут все-таки в переменную результат запроса никак не записать?
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38933534
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тебе обязательно тело файла передавать по ws?
если нет,
то в
$('#download').attr('href', p);
document.getElementById('download').click();
<a href="" download="xxx.xlsx" id="download" ></a>
p - может быть путем к файлу, который можно передать по ws.
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38933536
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а зачем ?
всё равно ты принятый объём держишь на клиенте....
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38933538
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадятебе обязательно тело файла передавать по ws?
Да, обязательно, поэтому столько "изврата" :) Причем, сокет тоже особо трогать не могу - как есть нужно использовать
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38933544
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну тогда проверь мой вариант
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38933550
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Окей, спс еще раз за помощь!
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38936778
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадя , если не сложно, можешь еще по вопросу парсинга потока проконсультировать?
У меня получается, что идет большой поток данных, который как бы накапливается в переменной response, а уже потом после окончательного получения данных я беру эту переменную и преобразовываю в бинарный файл и отдаю пользователю.
Если я правильно понимаю, данный поток можно читать частями, чтобы была меньше нагрузка на ресурсы.
То есть прочитал часть данных, сконвертировал в BLOB. Потом прочитал следующую и соединил с предыдущей частью.
Я правильно понимаю? Если да, то чем можно читать поток? С помощью substring ?

Или же будет легче, если я буду конвертировать первую часть в BLOB, временно класть в IndexedDB, потом заново считывать сохраненную часть и соединять со следующей? По идее, получится, что файл будет какое-то время лежать на жестком диске, что в свою очередь разгрузит и процессор, и память...или я не прав?
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38936785
Фотография -k2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чем дальше, тем все больше напоминает вывернутый наизнанку rtmp :)
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38936920
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qi_ip,
двай на мыло, вопрос, и можно по скайпу, для оперативности
...
Рейтинг: 0 / 0
Как передать файл с помощью JavaScript
    #38937106
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадяqi_ip,
двай на мыло, вопрос, и можно по скайпу, для оперативности
Отписался на мыло в профиле.
...
Рейтинг: 0 / 0
61 сообщений из 61, показаны все 3 страниц
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Как передать файл с помощью JavaScript
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]