Сохранение двоичных данных в файл
Возникла ошибка при сохранении содержимого Uint8Array на диск, вместо двоичных данных получаю текст из десятичных представлений.
Сделано на работающем примере, с тем отличием, что в рабочем, чужом, скрипте, использовался несуществующий МИМЕ-тип "image/retrocomputer". Использовтать рабочий скрипт не могу по 2м причинам, одна - этическая, вторая - я не нашел описания конструкции типа "onload = () => {let dat...}". яндекс вообще об выделенную часть споткнулся и мне пришлось чистить куки ))) (если кто может кинуть правильным названием, "= () =>" - как это называется, что бы можно было искать описание - спаибо!) Вот вырезал саму "сохранялку", прошу найти ошибку! ззы: На выходе получаю файл с содержимым "255254253252251250 ... 228227226225224" <!DOCTYPE html> <html><head> <meta charset="utf-8"> </head> <body> <a id="FileSaver" style="display:none;"></a> <p>Test for bin files saving...</p> <script> const FS=document.getElementById("FileSaver"); var bf=new Uint8Array(32); // Буфер двоичных данных для примера for (i=0;i<bf.length;i++) {bf[i]=~i;} // Кидаем в буфер некие "полезные" данные save(bf); function save(bf) { alert('size:'+bf.length); // Проверяем, не потерян ли массив? let blb=new Blob(bf,{type:'application/octet-stream'}); const Data=URL.createObjectURL(blb); FS.href=Data; FS.download="probe.bin"; FS.click(); } </script> </body> </html> зы: линк использую статический, т.к. он "многоразвого использования", а обычно у всех создается дом-объект, который тут же удаляется, но уверен, проблема не в этом. |
Цитата:
onload = () => {let dat...} это window.onload = function(){let dat...} |
Цитата:
И revokeObjectURL потом не забыть, на всякий - по таймауту |
Цитата:
Цитата:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> </head> <body> <p>File saving test...</p> <a id="fileSaver">Save</a> <script> const link = document.getElementById("fileSaver"); const buffer = new Uint8Array(32); for(let i = 0; i < buffer.length; i++) { buffer[i] = ~i; } save(buffer); function save(buffer) { let blob = new Blob([buffer], { type: "application/octet-stream" }); const url = URL.createObjectURL(blob); link.href = url; link.download = "probe.bin"; } </script> </body> </html> Почему это нужно именно так? Потому я как пользователь совершенно не понимаю, зачем мне нужны эти уведомления, зачем вам нужно знать моё местоположение и зачем мне нужен этот файл! Сначала расскажите что это, зачем это, а мы уж решим надо нам это или нет! И нажмём на кнопку! А то как вы предлагаете, однозначно Отмена! |
Вложений: 1
Всем большое спасибо за помощь!
Особенно за запихивание массива в массив, слазил на сайт мозиллы, так и есть, в описании тишина, но в примере используется. "Упрощения" со "стрелочными" фукции буду изучать, но пока мне подобная запись не нравится, как-то привык к строгому стилю. Malleys, сказать, что Вы меня удивили - ничего не сказать. По Вашей реакции кажется, что на этом форуме приходят только с вопросами, типа "мне срочно нужен спам-бот и вирус, и что бы Каспер не визжал" ))) Попытаюсь ответить на Ваши вопросы... 1. Про Алерт, и то, как я могу проверять, что массив все еще массив... Увы, очень часто я "теряю" массив и не сразу догадываюсь что вместо данных там "undefined". Этот Алерт не рабочий, а всего лишь для отладки. Весь этот код мне и не нужен, я его вытащил и собрал для поиска ошибки. А Консоль пользую реже, чем Алерт, т.к. мне так удобнее: не нужно переключаться на другое окно, что бы увидеть результаты, и главное, в Алерте будут только мои данные, а в лог сыпятся ошибки сразу из нескольких десятков открытых окон (в том числе и с этого сайта), т.к. он общий для всех. И искать потом среди кучи мусора, где "мое" - проблематично. Так что "Да, я так могу!" ))) 2. Про навязчивое скачивание (ржал). Пытаюсь сделать, что бы страничка была больше похожа на приложение, чем на страничку, поэтому вместо куцего линка использую полноценную кнопку, к которой подвязана сохранялка. Вернее кнопок целых 16, что бы был выбор ))) Для очистки совести, прикладываю черновичек того, что есть, сразу видно, что пользователь сам вибирает, нужно ли ему чего сохранять тили нет ))) Только на превьюшке не видно не фига, движок пережимает. 3. "зачем вам нужно знать моё местоположение". На этот вопрос я ответить не могу, т.к. ... эээээ, мне и не нужно этого знать, и вроде в коде нет на это никакого намека, все чисто... |
Я про то, что зачем столько рутины! Хотя вам может быть не понятно, поскольку вы очевидно не используете hot reloading. Это позволяет печатать в редакторе и сразу наблюдать изменения после сохранения, а если будут всё время выскакивать модальные окна и диалоговые окна для сохранения файла, то их же придётся всё время закрывать!
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
|
Часовой пояс GMT +3, время: 07:41. |