powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Как передать файл с помощью JavaScript
25 сообщений из 61, страница 2 из 3
Как передать файл с помощью 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
25 сообщений из 61, страница 2 из 3
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Как передать файл с помощью JavaScript
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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