Имя загружаемого файла в данных: Application / octet-stream; - PullRequest
21 голосов
/ 05 августа 2011

Я пытаюсь загрузить файл, используя data uri, следующим образом:

<input type="button"
  onclick="window.location.href='data:Application/octet-stream;content-disposition:attachment;filename=file.txt,${details}'"
  value="Download"/>

Проблема в том, что загруженный файл всегда называется «Неизвестно», что бы я ни пытался использовать в качестве имени файла.Это правильный способ дать файлу имя?или что-то еще нужно сделать?

Ответы [ 5 ]

36 голосов
/ 17 декабря 2012

Вот решение, вам просто нужно добавить атрибут download к тегу привязки a с желаемым именем

<a href="data:application/csv;charset=utf-8,Col1%2CCol2%2CCol3%0AVal1%2CVal2%2CVal3%0AVal11%2CVal22%2CVal33%0AVal111%2CVal222%2CVal333"
  download="somedata.csv">Example</a>

Другое решение - использовать JQuery / Javascript

Свойство Anchor's Download

3 голосов
/ 08 апреля 2015

В Safari вы можете использовать это и указать пользователю,-S файл:

window.open('data:text/csv;base64,' + encodeURI($window.btoa(content)));

В противном случае используется Filesaver.js , но работает нормально.:

    var downloadFile = function downloadFile(content, filename) {
      var supportsDownloadAttribute = 'download' in document.createElement('a');

      if(supportsDownloadAttribute) {
        var link = angular.element('<a/>');
        link.attr({
          href: 'data:attachment/csv;base64,' + encodeURI($window.btoa(content)),
          target: '_blank',
          download: filename
        })[0].click();
        $timeout(function() {
          link.remove();
        }, 50);
      } else if(typeof safari !== 'undefined') {
        window.open('data:attachment/csv;charset=utf-8,' + encodeURI(content));
      } else {
        var blob = new Blob([content], {type: "text/plain;charset=utf-8"});
        saveAs(blob, filename);
      }
    }

Примечание : В приведенном выше коде есть некоторый AngularJS, но его легко выделить ...

1 голос
/ 02 февраля 2015

Для тех, кто использует другие библиотеки, такие как angularjs или backbone, вы можете попробовать что-то вроде этого.

$ ('a.download'). Attr ('href', 'data: application / csv; charset = utf-8,' + $ scope.data);

0 голосов
/ 21 января 2019

Для всех, кто ищет решение на стороне клиента, использующее только Javascript, вот мое, работающее на любом браузере, кроме IE 10 и ниже (и Edge ... почему?!):

var uri = 'data:application/csv;charset=UTF-8,' + encodeURIComponent(csv);
var link = document.createElement('a');
link.setAttribute("download", "extract.csv");
link.setAttribute("href", uri);
document.body.appendChild(link);
link.click();
body.removeChild(body.lastChild);
0 голосов
/ 14 марта 2017

У меня была та же проблема, и наконец я решил во всех браузерах, обслуживающих файл CSV на стороне сервера:

const result = json2csv({ data });

res.writeHead(200
        'Content-Type': 'application/octet-stream',
        'Content-Disposition': 'attachment;filename=issues.csv',
        'Content-Length': result.length
});

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