как отправить файл csv для загрузки с помощью NodeJS и AngularJS [duplicate]

Конечно, есть много таких подходов, как синхронный запрос, обещание, но из моего опыта я думаю, что вы должны использовать подход обратного вызова. Естественно, что асинхронное поведение Javascript. Итак, ваш фрагмент кода можно переписать немного иначе:

function foo() {
    var result;

    $.ajax({
        url: '...',
        success: function(response) {
            myCallback(response);
        }
    });

    return result;
}

function myCallback(response) {
    // Does something.
}
3
задан lin 5 March 2015 в 09:56
поделиться

2 ответа

Прежде всего, вы не можете «скрыть / не публиковать» ссылку в приложении с веб-технологией (HTML / CSS / JavaScript). Загрузки обрабатываются клиентом, поэтому URL-адрес Download / Link должен быть общедоступным. Вы можете попытаться «скрыть» защитные параметры, например, Идентификаторы в URL-адресе загрузки с использованием бэкэнда, исполняемого языка программирования, такого как «PHP или node.js и т. Д.». Таким образом вы можете создать hash URL, например http://www.myside.com/download/359FTBW!S3T387IHS, чтобы скрыть параметры, такие как recordId в вашем URL-адресе.

Зная это, ваше решение довольно легко. Просто используйте атрибут HTML для загрузки , например <a href="http://mydownloadurl" download>link text</a>, чтобы заставить браузер загружать источник href. Здесь нет ng-click. К сожалению, атрибут download не поддерживается браузером Safari. Это не имеет большого значения, когда браузер обрабатывает загрузку. В зависимости от конфигурации операционной системы пользователей файл будет загружен или открыт непосредственно в программе, установленной в этой системе. Например, файл PDF будет открыт в приложении PDF Viewer, если доступно какое-либо приложение для просмотра PDF.

Я написал Plunker , который обрабатывает ng-href в контроллере AngularJS $scope. Я надеюсь, что это то, что вам нужно.

Ваш контроллер:

var app = angular.module('plunker', []);

app.controller('MainCtrl', function($scope) {
  $scope.fileHref = 'http://www.analysis.im/uploads/seminar/pdf-sample.pdf';
});

Ваш взгляд:

<head>
  <meta charset="utf-8" />
  <title>AngularJS Plunker</title>
  <script>
    document.write('<base href="' + document.location + '" />');
  </script>
  <link rel="stylesheet" href="style.css" />
  <script data-require="angular.js@1.3.x" src="https://code.angularjs.org/1.3.14/angular.js" data-semver="1.3.14"></script>
  <script src="app.js"></script>
</head>

<body ng-controller="MainCtrl">
  <a ng-href="fileHref" download="yourFilename">Download</a>
</body>
</html>
4
ответ дан lin 31 August 2018 в 13:48
поделиться

Я должен был достичь функциональности. Также необходимо убедиться, что он работает для всех основных поддерживаемых браузеров. Вот решение для тех же !!!

Happy Coding !!!

Ваш просмотр / HTML

<a target="_self" class="ui right floated btn btn-warning" href ng-click="downloadInvoice()"> Download </a>

Ваш контроллер

$scope.downloadInvoice = function () {
    $http.post(url,requestData, {responseType:'arraybuffer',headers:header
        })
            .success(function (response) {
                var file = new Blob([response], {type: 'application/pdf'});

                var isChrome = !!window.chrome && !!window.chrome.webstore;
                var isIE = /*@cc_on!@*/false || !!document.documentMode;
                var isEdge = !isIE && !!window.StyleMedia;


                if (isChrome){
                    var url = window.URL || window.webkitURL;

                    var downloadLink = angular.element('<a></a>');
                    downloadLink.attr('href',url.createObjectURL(file));
                    downloadLink.attr('target','_self');
                    downloadLink.attr('download', 'invoice.pdf');
                    downloadLink[0].click();
                }
                else if(isEdge || isIE){
                    window.navigator.msSaveOrOpenBlob(file,'invoice.pdf');

                }
                else {
                    var fileURL = URL.createObjectURL(file);
                    window.open(fileURL);
                }

            })
};
7
ответ дан Sagar Desai 31 August 2018 в 13:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: