> 백엔드 개발 > C++ > AngularJS를 사용하여 ASP.NET 웹 API에서 파일을 효율적으로 다운로드하는 방법은 무엇입니까?

AngularJS를 사용하여 ASP.NET 웹 API에서 파일을 효율적으로 다운로드하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2025-01-03 10:44:40
원래의
146명이 탐색했습니다.

How to Efficiently Download Files from ASP.NET Web APIs Using AngularJS?

AngularJS를 사용하여 ASP.NET 웹 API에서 파일 다운로드

AngularJS 애플리케이션에서는 ASP.NET 웹 API 메서드에 대한 HTTP GET 요청을 트리거하여 파일을 검색할 수 있습니다. . 그러나 다운로드한 파일을 처리하려면 실제 다운로드 프로세스를 촉진하기 위한 추가 단계가 필요합니다.

간단한 다운로드 방법 사용

기본 다운로드를 트리거하려면 window.open 기능을 활용해야 합니다.

$scope.downloadFile = function(downloadPath) { 
    window.open(downloadPath, '_blank', '');  
}
로그인 후 복사

이 방법은 AJAX를 활용하지 않고 직접 다운로드를 시작합니다.

AJAX 바이너리 다운로드 구현 방법

여러 브라우저를 지원하는 보다 효율적인 접근 방식을 위해 다음 구현 사용을 고려하세요.

$scope.downloadFile = function(httpPath) {
    // Use an arraybuffer
    $http.get(httpPath, { responseType: 'arraybuffer' })
    .success( function(data, status, headers) {

        var octetStreamMime = 'application/octet-stream';
        var success = false;

        // Get the headers
        headers = headers();

        // Get the filename from the x-filename header or default to "download.bin"
        var filename = headers['x-filename'] || 'download.bin';

        // Determine the content type from the header or default to "application/octet-stream"
        var contentType = headers['content-type'] || octetStreamMime;

        try
        {
            // Try using msSaveBlob if supported
            console.log("Trying saveBlob method ...");
            var blob = new Blob([data], { type: contentType });
            if(navigator.msSaveBlob)
                navigator.msSaveBlob(blob, filename);
            else {
                // Try using other saveBlob implementations, if available
                var saveBlob = navigator.webkitSaveBlob || navigator.mozSaveBlob || navigator.saveBlob;
                if(saveBlob === undefined) throw "Not supported";
                saveBlob(blob, filename);
            }
            console.log("saveBlob succeeded");
            success = true;
        } catch(ex)
        {
            console.log("saveBlob method failed with the following exception:");
            console.log(ex);
        }

        if(!success)
        {
            // Get the blob url creator
            var urlCreator = window.URL || window.webkitURL || window.mozURL || window.msURL;
            if(urlCreator)
            {
                // Try to use a download link
                var link = document.createElement('a');
                if('download' in link)
                {
                    // Try to simulate a click
                    try
                    {
                        // Prepare a blob URL
                        console.log("Trying download link method with simulated click ...");
                        var blob = new Blob([data], { type: contentType });
                        var url = urlCreator.createObjectURL(blob);
                        link.setAttribute('href', url);

                        // Set the download attribute (Supported in Chrome 14+ / Firefox 20+)
                        link.setAttribute("download", filename);

                        // Simulate clicking the download link
                        var event = document.createEvent('MouseEvents');
                        event.initMouseEvent('click', true, true, window, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
                        link.dispatchEvent(event);
                        console.log("Download link method with simulated click succeeded");
                        success = true;

                    } catch(ex) {
                        console.log("Download link method with simulated click failed with the following exception:");
                        console.log(ex);
                    }
                }

                if(!success)
                {
                    // Fallback to window.location method
                    try
                    {
                        // Prepare a blob URL
                        // Use application/octet-stream when using window.location to force download
                        console.log("Trying download link method with window.location ...");
                        var blob = new Blob([data], { type: octetStreamMime });
                        var url = urlCreator.createObjectURL(blob);
                        window.location = url;
                        console.log("Download link method with window.location succeeded");
                        success = true;
                    } catch(ex) {
                        console.log("Download link method with window.location failed with the following exception:");
                        console.log(ex);
                    }
                }

            }
        }

        if(!success)
        {
            // Fallback to window.open method
            console.log("No methods worked for saving the arraybuffer, using last resort window.open");
            window.open(httpPath, '_blank', '');
        }
    })
    .error(function(data, status) {
        console.log("Request failed with status: " + status);

        // Optionally write the error out to scope
        $scope.errorDetails = "Request failed with status: " + status;
    });
};
로그인 후 복사

사용법 및 메모

향상된 방법을 사용하려면:

var downloadPath = "/files/instructions.pdf";
$scope.downloadFile(downloadPath);
로그인 후 복사

참고: Web API에 적절한 헤더를 포함해야 합니다. 방법:

  • 파일 이름의 x-filename
  • MIME 유형의 content-type

위 내용은 AngularJS를 사용하여 ASP.NET 웹 API에서 파일을 효율적으로 다운로드하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿