Загрузка не работает для bash скриптов в браузере - PullRequest
0 голосов
/ 14 января 2020

Мне требуется скачать контент, который начинается со значения переменной result. Загруженная страница кажется пустой, что, по-моему, является проблемой с кодировкой. Не могли бы вы помочь исправить это?

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

   var result="#!/usr/bin/env bash";
  const filenamecc ="result";
   const url = "data:text/csv;charset=utf-8," + encodeURI(result);
   const link = document.createElement("a");
   link.setAttribute("href", url);
   link.setAttribute("download", filenamecc + ".sh");
   document.body.appendChild(link);
   link.click();

Ответы [ 2 ]

1 голос
/ 14 января 2020

# - это специальный символ в URL (и ваши данные начинаются с него). Используйте кодировку Base64.

И получите правильный тип контента.

const buff = new Buffer(result);
const encoded = buff.toString('base64');
const uri = 'data:text/x-shellscript;charset=utf-8;base64,' + encoded;
0 голосов
/ 14 января 2020

Функция encodeURIComponent должна использоваться для кодирования параметров queryString, в частности URL-адресов и любых специальных символов, присутствующих в строке запроса.

Разница между encodeURI и encodeURIComponent is encodeURIComponent кодирует всю строку, где encodeURI игнорирует префикс протокола

Замените encodeURI на encodeURIComponent

   var result="#!/usr/bin/env bash";
   const filenamecc ="result";
   const url = "data:text/csv;charset=utf-8," + encodeURIComponent(result);
   const link = document.createElement("a");
   link.setAttribute("href", url);
   link.setAttribute("download", filenamecc + ".sh");
   document.body.appendChild(link);
   link.click();

MDN Ссылка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...