অ্যাঙ্গুলারজেএস ব্যবহার করে একটি এএসপি.নেট ওয়েব এপিআই পদ্ধতি থেকে ফাইল ডাউনলোড করুন


132

আমার কৌণিক জেএস প্রকল্পে আমার একটি <a>অ্যাঙ্কর ট্যাগ রয়েছে, যা ক্লিক করা হলে GETএকটি ওয়েবএপিআই পদ্ধতিতে এইচটিটিপি অনুরোধ করে যা কোনও ফাইল ফেরত দেয়।

এখন, আমি অনুরোধটি সফল হয়ে গেলে ফাইলটি ব্যবহারকারীকে ডাউনলোড করতে চাই। আমি কেমন করে ঐটি করি?

অ্যাঙ্কর ট্যাগ:

<a href="#" ng-click="getthefile()">Download img</a>

AngularJS:

$scope.getthefile = function () {        
    $http({
        method: 'GET',
        cache: false,
        url: $scope.appPath + 'CourseRegConfirm/getfile',            
        headers: {
            'Content-Type': 'application/json; charset=utf-8'
        }
    }).success(function (data, status) {
        console.log(data); // Displays text data if the file is a text file, binary if it's an image            
        // What should I write here to download the file I receive from the WebAPI method?
    }).error(function (data, status) {
        // ...
    });
}

আমার ওয়েবএপিআই পদ্ধতি:

[Authorize]
[Route("getfile")]
public HttpResponseMessage GetTestFile()
{
    HttpResponseMessage result = null;
    var localFilePath = HttpContext.Current.Server.MapPath("~/timetable.jpg");

    if (!File.Exists(localFilePath))
    {
        result = Request.CreateResponse(HttpStatusCode.Gone);
    }
    else
    {
        // Serve the file to the client
        result = Request.CreateResponse(HttpStatusCode.OK);
        result.Content = new StreamContent(new FileStream(localFilePath, FileMode.Open, FileAccess.Read));
        result.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
        result.Content.Headers.ContentDisposition.FileName = "SampleImg";                
    }

    return result;
}

1
ফাইল টাইপ কি হবে? শুধু ছবি?
রশ্মিন জাভিয়া

@ রাশমিন জাভিয়া .jpg, .ডোক,। Xlsx, .ডোক্স,। টেক্সট বা .পিডিএফ হতে পারে।
যেখানে ড্র্যাগনসডওয়েল

আপনি কোন নেট ফ্রেমওয়ার্ক ব্যবহার করছেন?
রশ্মিন জাভিয়া

@ রাশমিন জাভিয়া। নেট 4.5
যেখানে ড্র্যাগনসডওয়ে

1
@ কুরকুলার আপনার সিস্টেমের ফাইল ব্যবহার করা উচিত Iআইও ফাইলটি নিয়ামক থেকে নয়
জাভিস্ক

উত্তর:


242

এজ্যাক্স ব্যবহার করে বাইনারি ফাইলগুলি ডাউনলোড করার জন্য সমর্থন দুর্দান্ত নয়, এটি এখনও কার্যকরী খসড়া হিসাবে বিকাশাধীন

সাধারণ ডাউনলোড পদ্ধতি:

আপনি নীচের কোডটি ব্যবহার করে ব্রাউজারটি অনুরোধ করা ফাইলটি ডাউনলোড করতে পারেন এবং এটি সমস্ত ব্রাউজারে সমর্থিত এবং স্পষ্টতই ওয়েবএপি অনুরোধটিকে ট্রিগার করবে।

$scope.downloadFile = function(downloadPath) { 
    window.open(downloadPath, '_blank', '');  
}

অ্যাজাক্স বাইনারি ডাউনলোড পদ্ধতি:

বাইনারি ফাইলটি ডাউনলোড করতে এজাক্স ব্যবহার করা কিছু ব্রাউজারে করা যেতে পারে এবং নীচে একটি বাস্তবায়ন যা ক্রোম, ইন্টারনেট এক্সপ্লোরার, ফায়ারফক্স এবং সাফারি এর সর্বশেষ স্বাদে কাজ করবে।

এটি একটি arraybufferপ্রতিক্রিয়া টাইপ ব্যবহার করে , যা পরে একটি জাভাস্ক্রিপ্টে রূপান্তরিত হয় blob, যা হয় saveBlobপদ্ধতিটি ব্যবহার করে সংরক্ষণ করার জন্য উপস্থাপিত হয় - যদিও এটি বর্তমানে কেবলমাত্র ইন্টারনেট এক্সপ্লোরার-এ উপস্থিত রয়েছে - বা ব্রাউজার দ্বারা খোলা একটি ব্লব ডেটা URL- এ রূপান্তরিত হয়েছে, ট্রিগার করছে ডাউনলোড ডায়ালগটি যদি ব্রাউজারে দেখার জন্য মাইম টাইপ সমর্থন করে।

ইন্টারনেট এক্সপ্লোরার 11 সমর্থন (স্থির)

দ্রষ্টব্য: ইন্টারনেট এক্সপ্লোরার 11 msSaveBlobযদি ফাংশনটি অ্যালিজ করা থাকে তবে এটি ব্যবহার পছন্দ করে না - সম্ভবত কোনও সুরক্ষা বৈশিষ্ট্য, তবে সম্ভবত একটি ত্রুটি, সুতরাং var saveBlob = navigator.msSaveBlob || navigator.webkitSaveBlob ... etc.উপলভ্য saveBlobসমর্থনটি নির্ধারণের জন্য একটি ব্যতিক্রম ঘটায়; সুতরাং নীচের কোডটি কেন এখন navigator.msSaveBlobপৃথকভাবে পরীক্ষা করে । ধন্যবাদ? মাইক্রোসফট

// Based on an implementation here: web.student.tuwien.ac.at/~e0427417/jsdownload.html
$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);

মন্তব্য:

নিম্নলিখিত শিরোনামগুলি ফিরিয়ে আনার জন্য আপনার ওয়েবএপি পদ্ধতিটি পরিবর্তন করা উচিত:

  • আমি x-filenameফাইলের নাম পাঠাতে হেডারটি ব্যবহার করেছি । এটি সুবিধার জন্য এটি একটি কাস্টম শিরোনাম, তবে আপনি content-dispositionনিয়মিত অভিব্যক্তি ব্যবহার করে শিরোনাম থেকে ফাইলের নামটি বের করতে পারেন ।

  • content-typeআপনার প্রতিক্রিয়াটির জন্য আপনার মাইম শিরোনামও সেট করা উচিত , তাই ব্রাউজারটি ডেটা ফর্ম্যাটটি জানে।

আশা করি এটা কাজে লাগবে.


হাই @ স্কট আমি আপনার পদ্ধতিটি ব্যবহার করেছি এবং এটি কাজ করে তবে ব্রাউজারটি এইচটিএমএল টাইপ হিসাবে পিডিএফ হিসাবে ফাইলটি সংরক্ষণ করে। আমি অ্যাপ্লিকেশন / পিডিএফ-তে কনটেন্ট-টাইপ সেট করে রেখেছি এবং যখন আমি ক্রোমে ডেভেলপার সরঞ্জামগুলিতে যাচাই করি তখন অ্যাপ্লিকেশন / পিডিএফ-তে প্রতিক্রিয়া টাইপ করা হয় তবে আমি ফাইলটি সংরক্ষণ করি এটি যখন এইচটিএমএল হিসাবে প্রদর্শিত হয়, এটি কাজ করে, যখন আমি এটি খুলি তখন ফাইলটি হয় পিডিএফ হিসাবে খোলা হয়েছে তবে ব্রাউজারে এবং আমার ব্রাউজারের জন্য আইকন ডিফল্ট রয়েছে। তুমি কি জান আমি কি ভুল করতে পারি?
বার্তোস্ বিয়ালেস্কি

1
। :-( দুঃখিত আমি দেখতে মিস BTW এই ব্যাপকভাবে কাজ করছে আরও ভাল filesaver.js হয়।।
Jeeva থেকে Jsb

1
আমি যখন এই পদ্ধতির মাধ্যমে কোনও মাইক্রোসফ্ট এক্সিকিউটেবল ডাউনলোড করার চেষ্টা করি তখন আমি একটি অঙ্কুর আকার ফিরে পাই যা প্রকৃত ফাইলের আকারের প্রায় 1.5 গুণ times ডাউনলোড করা ফাইলটি ব্লবের আকারের সঠিক আকার ধারণ করে। কেন এমন হতে পারে এমন কোনও চিন্তা? ফিডলারের দিকে তাকানোর উপর ভিত্তি করে, প্রতিক্রিয়াটির আকারটি সঠিক, তবে সামগ্রীকে একটি পুষ্পে রূপান্তর করা এটি কোনওভাবে এটিকে বাড়িয়ে তুলছে।
ব্যবহারকারী 3517454

1
অবশেষে সমস্যাটি সনাক্ত করলেন ... পাওয়ার জন্য আমি একটি পোস্ট থেকে সার্ভার কোডটি পরিবর্তন করেছিলাম, তবে আমি $ http.get- এর জন্য প্যারামিটারগুলি পরিবর্তন করি নি। সুতরাং প্রতিক্রিয়া টাইপ আরেবাফার হিসাবে সেট করা হয়নি কারণ এটি তৃতীয় আর্গুমেন্ট হিসাবে পাস করা হয়েছিল এবং দ্বিতীয়টি নয়।
ব্যবহারকারী 3517454

1
@ রবার্টগোল্ডউইন আপনি এটি করতে পারেন, তবে অনুমানটি হ'ল আপনি যদি একটি কৌণিক জাল অ্যাপ্লিকেশন ব্যবহার করে থাকেন তবে আপনি চান যে ব্যবহারকারীর অ্যাপ্লিকেশনটিতে থাকতে হবে, যেখানে ডাউনলোড শুরু হওয়ার পরে কার্যকারিতা ব্যবহারের রাষ্ট্র এবং ক্ষমতা বজায় থাকে। আপনি যদি সরাসরি ডাউনলোডে নেভিগেট করেন তবে অ্যাপ্লিকেশনটি সক্রিয় থাকার কোনও গ্যারান্টি নেই, ব্রাউজারটি আমাদের প্রত্যাশার মতো ডাউনলোডটি পরিচালনা করতে পারে না। সার্ভারটি অনুরোধটি 500 বা 404 হয় কিনা তা কল্পনা করুন। ব্যবহারকারী এখন অ্যাঙ্গুলার অ্যাপের বাইরে চলে গেছে। ব্যবহার করে একটি নতুন উইন্ডোতে লিঙ্কটি খোলার সহজ পরামর্শ window.openদেওয়া হল।
স্কট

10

সি # ওয়েবএপিআই পিডিএফ কৌনিক জেএস প্রমাণীকরণের সাথে সমস্ত কাজ করে

ওয়েব এপিআই কন্ট্রোলার

[HttpGet]
    [Authorize]
    [Route("OpenFile/{QRFileId}")]
    public HttpResponseMessage OpenFile(int QRFileId)
    {
        QRFileRepository _repo = new QRFileRepository();
        var QRFile = _repo.GetQRFileById(QRFileId);
        if (QRFile == null)
            return new HttpResponseMessage(HttpStatusCode.BadRequest);
        string path = ConfigurationManager.AppSettings["QRFolder"] + + QRFile.QRId + @"\" + QRFile.FileName;
        if (!File.Exists(path))
            return new HttpResponseMessage(HttpStatusCode.BadRequest);

        HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
        //response.Content = new StreamContent(new FileStream(localFilePath, FileMode.Open, FileAccess.Read));
        Byte[] bytes = File.ReadAllBytes(path);
        //String file = Convert.ToBase64String(bytes);
        response.Content = new ByteArrayContent(bytes);
        response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
        response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
        response.Content.Headers.ContentDisposition.FileName = QRFile.FileName;

        return response;
    }

কৌণিক জেএস পরিষেবা

this.getPDF = function (apiUrl) {
            var headers = {};
            headers.Authorization = 'Bearer ' + sessionStorage.tokenKey;
            var deferred = $q.defer();
            $http.get(
                hostApiUrl + apiUrl,
                {
                    responseType: 'arraybuffer',
                    headers: headers
                })
            .success(function (result, status, headers) {
                deferred.resolve(result);;
            })
             .error(function (data, status) {
                 console.log("Request failed with status: " + status);
             });
            return deferred.promise;
        }

        this.getPDF2 = function (apiUrl) {
            var promise = $http({
                method: 'GET',
                url: hostApiUrl + apiUrl,
                headers: { 'Authorization': 'Bearer ' + sessionStorage.tokenKey },
                responseType: 'arraybuffer'
            });
            promise.success(function (data) {
                return data;
            }).error(function (data, status) {
                console.log("Request failed with status: " + status);
            });
            return promise;
        }

হয় কেউ করবে

কৌনিক জেএস কন্ট্রোলার পরিষেবাটি কল করছে

vm.open3 = function () {
        var downloadedData = crudService.getPDF('ClientQRDetails/openfile/29');
        downloadedData.then(function (result) {
            var file = new Blob([result], { type: 'application/pdf;base64' });
            var fileURL = window.URL.createObjectURL(file);
            var seconds = new Date().getTime() / 1000;
            var fileName = "cert" + parseInt(seconds) + ".pdf";
            var a = document.createElement("a");
            document.body.appendChild(a);
            a.style = "display: none";
            a.href = fileURL;
            a.download = fileName;
            a.click();
        });
    };

এবং শেষ HTML পৃষ্ঠা

<a class="btn btn-primary" ng-click="vm.open3()">FILE Http with crud service (3 getPDF)</a>

এটি কেবল কোডটি ভাগ করে নেওয়ার সাথে সাথে যোগাযোগ করা হবে এখন আশা করি এটি কারওর পক্ষে সহায়তা করবে কারণ এই কাজটি পেতে আমাকে কিছুটা সময় লেগেছে।


উপরের কোডগুলি আইওএস ব্যতীত সমস্ত সিস্টেমে কাজ করে তাই আইওএস পদক্ষেপ 1 এ কাজ করার জন্য আপনার যদি এই প্রয়োজন হয় তবে এই পদক্ষেপগুলি ব্যবহার করুন ios stackoverflow.com/questions/9038625/detect-if- ডিভাইস-is-io পদক্ষেপ 2 (যদি আইওএস) এটি ব্যবহার করে stackoverflow.com/questions/24485077/...
TFA


6

আমার জন্য ওয়েব এপিআই ছিল রেলস এবং ক্লায়েন্ট সাইড অ্যাঙ্গুলার যা রেষ্টাঙ্গুলার এবং ফাইলসেভার.জেএস এর সাথে ব্যবহৃত হয়েছিল

ওয়েব এপিআই

module Api
  module V1
    class DownloadsController < BaseController

      def show
        @download = Download.find(params[:id])
        send_data @download.blob_data
      end
    end
  end
end

এইচটিএমএল

 <a ng-click="download('foo')">download presentation</a>

কৌণিক নিয়ামক

 $scope.download = function(type) {
    return Download.get(type);
  };

কৌণিক পরিষেবা

'use strict';

app.service('Download', function Download(Restangular) {

  this.get = function(id) {
    return Restangular.one('api/v1/downloads', id).withHttpConfig({responseType: 'arraybuffer'}).get().then(function(data){
      console.log(data)
      var blob = new Blob([data], {
        type: "application/pdf"
      });
      //saveAs provided by FileSaver.js
      saveAs(blob, id + '.pdf');
    })
  }
});

আপনি এটির সাথে ফাইলসভার.জেএস কীভাবে ব্যবহার করেছেন? আপনি কীভাবে এটি বাস্তবায়ন করেছেন?
অ্যালান ডানিং

2

আমাদের এমন একটি সমাধানও বিকাশ করতে হয়েছিল যা এমন APIs এর সাথেও প্রমাণীকরণের প্রয়োজন হয় ( এই নিবন্ধটি দেখুন )

এখানে সংক্ষেপে অ্যাংুলারজেএস ব্যবহার করা আমরা কীভাবে এটি করেছি:

পদক্ষেপ 1: একটি উত্সর্গীকৃত নির্দেশিকা তৈরি করুন

// jQuery needed, uses Bootstrap classes, adjust the path of templateUrl
app.directive('pdfDownload', function() {
return {
    restrict: 'E',
    templateUrl: '/path/to/pdfDownload.tpl.html',
    scope: true,
    link: function(scope, element, attr) {
        var anchor = element.children()[0];

        // When the download starts, disable the link
        scope.$on('download-start', function() {
            $(anchor).attr('disabled', 'disabled');
        });

        // When the download finishes, attach the data to the link. Enable the link and change its appearance.
        scope.$on('downloaded', function(event, data) {
            $(anchor).attr({
                href: 'data:application/pdf;base64,' + data,
                download: attr.filename
            })
                .removeAttr('disabled')
                .text('Save')
                .removeClass('btn-primary')
                .addClass('btn-success');

            // Also overwrite the download pdf function to do nothing.
            scope.downloadPdf = function() {
            };
        });
    },
    controller: ['$scope', '$attrs', '$http', function($scope, $attrs, $http) {
        $scope.downloadPdf = function() {
            $scope.$emit('download-start');
            $http.get($attrs.url).then(function(response) {
                $scope.$emit('downloaded', response.data);
            });
        };
    }] 
});

পদক্ষেপ 2: একটি টেম্পলেট তৈরি করুন

<a href="" class="btn btn-primary" ng-click="downloadPdf()">Download</a>

পদক্ষেপ 3: এটি ব্যবহার করুন

<pdf-download url="/some/path/to/a.pdf" filename="my-awesome-pdf"></pdf-download>

এটি একটি নীল বোতাম রেন্ডার করবে। ক্লিক করা হলে, একটি পিডিএফ ডাউনলোড হবে (সতর্কতা: ব্যাকএন্ডটি বেস 64 কে এনকোডিংয়ে পিডিএফ সরবরাহ করতে হবে!) এবং href- এ রেখে দেওয়া হবে। বোতাম সবুজ ফিরিয়ে নেয় এবং পাঠ্য পরিবর্তন সংরক্ষণ করুন । ব্যবহারকারী আবার ক্লিক করতে পারেন এবং ফাইলটি My-awesome.pdf ফাইলের জন্য একটি স্ট্যান্ডার্ড ডাউনলোড ফাইল সংলাপের সাথে উপস্থাপিত হবে ।


1

আপনার ফাইলটিকে বেস 64 স্ট্রিং হিসাবে প্রেরণ করুন।

 var element = angular.element('<a/>');
                         element.attr({
                             href: 'data:attachment/csv;charset=utf-8,' + encodeURI(atob(response.payload)),
                             target: '_blank',
                             download: fname
                         })[0].click();

যদি অ্যাটর পদ্ধতি ফায়ারফক্সে কাজ না করে আপনি জাভা স্ক্রিপ্ট সেটঅ্যাট্রিবিউট পদ্ধতিও ব্যবহার করতে পারেন


var ব্লব = নতুন ব্লব ([atob (প্রতিক্রিয়া। পেইলোড)), {"ডেটা": "সংযুক্তি / সিএসভি; চরসেট = utf-8;"}); saveAs (ব্লব, 'ফাইলের নাম');
পিপিবি

আপনাকে ধন্যবাদ পিপিবি, আপনার সমাধানটি অ্যাটোব ব্যতীত আমার পক্ষে কাজ করেছিল। আমার জন্য এটি প্রয়োজন ছিল না।
ল্যারি ফ্লাইওয়েলিং

0

আপনি একটি শোফিল ফাংশন প্রয়োগ করতে পারেন যা ডাব্লুইবিপি থেকে ফিরে আসা ডেটার পরামিতি এবং আপনি যে ফাইলটি ডাউনলোড করার চেষ্টা করছেন তার ফাইলের নাম গ্রহণ করে। আমি যা করেছি তা একটি পৃথক ব্রাউজার পরিষেবা তৈরি করা ছিল যা ব্যবহারকারীর ব্রাউজারটি সনাক্ত করে এবং তারপরে ব্রাউজারের উপর ভিত্তি করে ফাইলটির রেন্ডারিং পরিচালনা করে। উদাহরণস্বরূপ, যদি লক্ষ্য ব্রাউজারটি কোনও আইপ্যাডে ক্রোম হয় তবে আপনাকে জাভাস্ক্রিপ্টগুলি ফাইলরেডার অবজেক্টটি ব্যবহার করতে হবে।

FileService.showFile = function (data, fileName) {
    var blob = new Blob([data], { type: 'application/pdf' });

    if (BrowserService.isIE()) {
        window.navigator.msSaveOrOpenBlob(blob, fileName);
    }
    else if (BrowserService.isChromeIos()) {
        loadFileBlobFileReader(window, blob, fileName);
    }
    else if (BrowserService.isIOS() || BrowserService.isAndroid()) {
        var url = URL.createObjectURL(blob);
        window.location.href = url;
        window.document.title = fileName;
    } else {
        var url = URL.createObjectURL(blob);
        loadReportBrowser(url, window,fileName);
    }
}


function loadFileBrowser(url, window, fileName) {
    var iframe = window.document.createElement('iframe');
    iframe.src = url
    iframe.width = '100%';
    iframe.height = '100%';
    iframe.style.border = 'none';
    window.document.title = fileName;
    window.document.body.appendChild(iframe)
    window.document.body.style.margin = 0;
}

function loadFileBlobFileReader(window, blob,fileName) {
    var reader = new FileReader();
    reader.onload = function (e) {
        var bdata = btoa(reader.result);
        var datauri = 'data:application/pdf;base64,' + bdata;
        window.location.href = datauri;
        window.document.title = fileName;
    }
    reader.readAsBinaryString(blob);
}

1
আপনাকে স্কট ধন্যবাদ এই আইটেমগুলি ধরার জন্য। আমি রিফ্যাক্টর করেছি এবং একটি ব্যাখ্যা যুক্ত করেছি।
এরকিন জিনজাজিভ

0

আমি সমাধানের অ্যারে পেরিয়েছি এবং এটিই আমার পক্ষে দুর্দান্ত কাজ করেছে বলে মনে হয়েছে।

আমার ক্ষেত্রে আমার কিছু শংসাপত্র সহ একটি পোস্ট অনুরোধ প্রেরণ করা দরকার। ছোট ওভারহেড ছিল স্ক্রিপ্টের ভিতরে jquery যুক্ত করা। কিন্তু এটি মূল্য ছিল।

var printPDF = function () {
        //prevent double sending
        var sendz = {};
        sendz.action = "Print";
        sendz.url = "api/Print";
        jQuery('<form action="' + sendz.url + '" method="POST">' +
            '<input type="hidden" name="action" value="Print" />'+
            '<input type="hidden" name="userID" value="'+$scope.user.userID+'" />'+
            '<input type="hidden" name="ApiKey" value="' + $scope.user.ApiKey+'" />'+
            '</form>').appendTo('body').submit().remove();

    }

-1

আপনার উপাদান যেমন কৌণিক জেএস কোড:

function getthefile (){
window.location.href='http://localhost:1036/CourseRegConfirm/getfile';
};
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.