একক ক্রিয়া সহ একাধিক ফাইল ডাউনলোড করুন


109

আমি নিশ্চিত না যে এটি স্ট্যান্ডার্ড ওয়েব প্রযুক্তি ব্যবহার করে সম্ভব কিনা।

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

এটি কি সম্ভব - যদি তাই হয় তবে আপনি কোন মৌলিক কৌশলটি সুপারিশ করেন। আমি জানি যে আমি সার্ভারের পার্শ্ব ইভেন্টগুলি তৈরি করতে ধূমকেতু প্রযুক্তি ব্যবহার করতে পারি যা কোনও এইচটিপিআরস্পোনকে ট্রিগার করে তবে আমি আশা করি এর থেকে আরও সহজ উপায় আছে।

উত্তর:


60

এইচটিটিপি একবারে একাধিক ফাইল ডাউনলোড সমর্থন করে না।

দুটি সমাধান রয়েছে:

  • ফাইল ডাউনলোড শুরু করতে এক্স পরিমাণ পরিমাণ উইন্ডো খুলুন (এটি জাভাস্ক্রিপ্ট দিয়ে করা হবে)
  • পছন্দসই সমাধান ফাইলগুলি জিপ করার জন্য একটি স্ক্রিপ্ট তৈরি করে

39
একটি জিপ ফাইল কেন পছন্দসই সমাধান? এটি ব্যবহারকারীর জন্য অতিরিক্ত পদক্ষেপ তৈরি করে (আনজিপিং)।
স্পিড প্লেন

7
এই পৃষ্ঠায় জাভাস্ক্রিপ্ট রয়েছে যা জিপ ফাইল তৈরি করে। পৃষ্ঠাটি দেখুন এটির একটি দুর্দান্ত উদাহরণ রয়েছে। stuk.github.io/jszip
নেটসই 1964

তৃতীয় উপায় হ'ল এসভিজি ফাইলগুলিতে ফাইলগুলি সজ্জিত করা। যদি ফাইলগুলি ব্রাউজারে প্রদর্শিত হয় তবে এসভিজি সবচেয়ে ভাল উপায় বলে মনে হয়।
ভেক্টরভোরটেক

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

2
এটি জাভাস্ক্রিপ্ট github.com/sindresorhus/m
মাল্টি-

84

var links = [
  'https://s3.amazonaws.com/Minecraft.Download/launcher/Minecraft.exe',
  'https://s3.amazonaws.com/Minecraft.Download/launcher/Minecraft.dmg',
  'https://s3.amazonaws.com/Minecraft.Download/launcher/Minecraft.jar'
];

function downloadAll(urls) {
  var link = document.createElement('a');

  link.setAttribute('download', null);
  link.style.display = 'none';

  document.body.appendChild(link);

  for (var i = 0; i < urls.length; i++) {
    link.setAttribute('href', urls[i]);
    link.click();
  }

  document.body.removeChild(link);
}
<button onclick="downloadAll(window.links)">Test me!</button>


3
আমি ছবি সহ অনেকগুলি ফাইলের সাথে কাজ করছি এবং এটি আমার পক্ষে সবচেয়ে ভাল কাজ করেছে worked যাইহোক, link.setAttribute('download', null);আমার সমস্ত ফাইলের নাম বাতিল করে দেওয়া হয়েছে।
তেহলিভি

7
এটি আইই ১১ তে কাজ করে না, এটি কেবলমাত্র জজার (তালিকার শেষ আইটেম) ডাউনলোড করে এটি সঠিক সমাধান ছিল :(
অনাদায়ী ইট

1
@ অ্যাঞ্জেলোমুরিরা ইয়েপ, কমপক্ষে এটি এজে কাজ করে। আপনি মাইক্রোসফট সাইটগুলোতে ইন্টারনেট একাধিক ফাইল ডাউনলোড করার চেষ্টা করুন, উদাহরণস্বরূপ , তারা একাধিক পপ আপ উইন্ডো ডিম, তাই আমি মনে করি ইন্টারনেট জন্য সবচেয়ে ভালো সমাধান এখনও থেকে উপরে দিমিত্রি Nogin
মাতাজ পোকর্নি

1
@ টেহলিভি - আমি একই জিনিস পেয়েছি। যোগ link.setAttribute('download',filename)লুপ ভিতরে। এটি আপনাকে নিজের ইচ্ছামত ফাইলগুলির নাম দিতে দেয়। এছাড়াও, আমি বিশ্বাস করি এটির URL নাম অন্তর্ভুক্ত নয় কেবল ফাইল নাম হওয়া দরকার। আমি দুটি অ্যারে প্রেরণ শেষ করেছি: একটি সম্পূর্ণ URL সহ এবং একটিতে কেবল ফাইল নাম।
ফিল্মদেব

7
এটি ক্রোম ভি 75, উইন্ডোজ 10 এ সঠিকভাবে কাজ করে না: কেবলমাত্র ডাউনলোড করা ফাইল Minecraft.jar
andreivictor

54

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

<!DOCTYPE HTML>
<html>
<body>
  <button id="download">Download</button> 

  <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
  <script type="text/javascript">

     $('#download').click(function() {
       download('http://nogin.info/cv.doc','http://nogin.info/cv.doc');
     });

     var download = function() {
       for(var i=0; i<arguments.length; i++) {
         var iframe = $('<iframe style="visibility: collapse;"></iframe>');
         $('body').append(iframe);
         var content = iframe[0].contentDocument;
         var form = '<form action="' + arguments[i] + '" method="GET"></form>';
         content.write(form);
         $('form', content).submit();
         setTimeout((function(iframe) {
           return function() { 
             iframe.remove(); 
           }
         })(iframe), 2000);
       }
     }      

  </script>
</body>
</html>

বা, jQuery ছাড়াই:

 function download(...urls) {
    urls.forEach(url => {
      let iframe = document.createElement('iframe');
      iframe.style.visibility = 'collapse';
      document.body.append(iframe);

      iframe.contentDocument.write(
        `<form action="${url.replace(/\"/g, '"')}" method="GET"></form>`
      );
      iframe.contentDocument.forms[0].submit();

      setTimeout(() => iframe.remove(), 2000);
    });
  }

দুর্দান্ত, তবে কিছু কারণে ফাইলগুলি ডাউনলোড হচ্ছে না। আমার কাছে কারণটি মনে হয় যে স্ক্রিপ্ট কার্যকর হওয়ার পরে পৃষ্ঠাটি পুনরায় লোড হয়ে গেছে, ফাইলগুলি ডাউনলোড না হওয়ার কারণ বলে মনে হচ্ছে। আমি কী ভুল করছি তার কোনও ক্লু?
চিরাগ মেহতা

আমি এই সমাধান সঙ্গে একাধিক সমস্যা পেয়েছি। আইইতে যেহেতু আমার প্যারেন্ট উইন্ডোটি ডকুমেন্ট.ডোমেন পরিবর্তন করেছে, আমার অ্যাক্সেস অস্বীকার করা হয়েছে। এটি ঠিক করার বিষয়ে বিভিন্ন পোস্ট রয়েছে, তবে সবাই হ্যাক লাগছে। ক্রোমে, ব্যবহারকারী একটি সতর্কতা বার্তা পেয়ে যায় যা ওয়েবসাইটকে একাধিক ফাইল ডনলোড করার চেষ্টা করে (তবে এটি কমপক্ষে এটি কাজ করে)। ফায়ারফক্সে, আমি বিভিন্ন ডাবলড বক্স পাই তবে যখন আমি সংরক্ষণ ক্লিক করি তখন ফাইল সংরক্ষণের ডায়ালগটি পাই না ...
মেলানিয়া

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

2
আইই 10 এ কাজ করে? আমি পেয়েছি: অবজেক্ট সম্পত্তি বা পদ্ধতি 'লিখন' সমর্থন করে না
হোপ্পে

ফিরে ফাংশন (বন্ধ?) কেন setTimeout()?
রবিস্রোব

34

এই সমাধানটি ব্রাউজারগুলিতে কাজ করে এবং সতর্কতাগুলিকে ট্রিগার করে না। একটি তৈরির পরিবর্তে iframe, এখানে আমরা প্রতিটি ফাইলের জন্য একটি লিঙ্ক তৈরি করি। এটি সতর্কতা বার্তাগুলি পপ আপ হতে বাধা দেয়।

লুপিং অংশটি পরিচালনা করতে, আমরা ব্যবহার করি, এটি আইইতে setTimeoutকাজ করার জন্য প্রয়োজনীয়।

/**
 * Download a list of files.
 * @author speedplane
 */
function download_files(files) {
  function download_next(i) {
    if (i >= files.length) {
      return;
    }
    var a = document.createElement('a');
    a.href = files[i].download;
    a.target = '_parent';
    // Use a.download if available, it prevents plugins from opening.
    if ('download' in a) {
      a.download = files[i].filename;
    }
    // Add a to the doc for click to work.
    (document.body || document.documentElement).appendChild(a);
    if (a.click) {
      a.click(); // The click method is supported by most browsers.
    } else {
      $(a).click(); // Backup using jquery
    }
    // Delete the temporary link.
    a.parentNode.removeChild(a);
    // Download the next file with a small timeout. The timeout is necessary
    // for IE, which will otherwise only download the first file.
    setTimeout(function() {
      download_next(i + 1);
    }, 500);
  }
  // Initiate the first download.
  download_next(0);
}
<script>
  // Here's a live example that downloads three test text files:
  function do_dl() {
    download_files([
      { download: "http://www.nt.az/reg.txt", filename: "regs.txt" },
      { download: "https://www.w3.org/TR/PNG/iso_8859-1.txt", filename: "standards.txt" },
      { download: "http://qiime.org/_static/Examples/File_Formats/Example_Mapping_File.txt", filename: "example.txt" },
    ]);
  };
</script>
<button onclick="do_dl();">Test downloading 3 text files.</button>


আমাকে এখানে সমর্থন করার জন্য এটিই এখানে একমাত্র আমার পক্ষে কাজ করেছেন support ধন্যবাদ.
ইস্টিন আমন্ডসেন

1
এই উত্তরটি সোনার। কেবলমাত্র একটি যা সতর্কতা বার্তা ছাড়াই সমস্ত ব্রাউজারে কাজ করে। বিশেষভাবে আই। জমকালো স্টাফ
মুকুল গোয়েল

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

2
বাটন কিছুই করে না Google Chrome Version 76.0.3809.100 (Official Build) (64-bit)
1934286

1
বোতাম স্ট্যাক ওভারফ্লো রান কোড স্নিপেটে কাজ করছে না। ব্রাউজার ক্রোম @ স্পিডপ্লেন
এমবি

5

সবচেয়ে সহজ উপায় হ'ল জিপ ফাইলের মধ্যে একাধিক ফাইল বান্ডিল পরিবেশন করা।

আমি মনে করি আপনি একগুচ্ছ iframes বা পপআপ ব্যবহার করে একাধিক ফাইল ডাউনলোড শুরু করতে পারেন, তবে ব্যবহারের দিক থেকে, একটি জিপ ফাইলটি আরও ভাল better ব্রাউজারটি যে দশটি "সেভ সেস" ডায়ালগের মাধ্যমে ক্লিক করতে চায়?


3
আমি বুঝতে পারি যে আপনার উত্তরটি ২০১০ সালের দিকে ফিরে এসেছে তবে আজকাল প্রচুর ব্যবহারকারী স্মার্টফোনের সাহায্যে ব্রাউজ করছেন, যার মধ্যে কয়েকটি ডিফল্টভাবে জিপগুলি খুলতে পারে না (একটি বন্ধু আমাকে বলে তার স্যামসাং এস 4 অ্যাক্টিভ জিপগুলি খুলতে পারে না)।
হাইড্রক্সান 14

4

আমি সম্মত হই যে একটি জিপ ফাইল হ'ল একটি পরিষ্কার সমাধান ... তবে আপনাকে যদি একাধিক ফাইল ঠেলাতে হয় তবে আমি যে সমাধানটি নিয়ে এসেছি তা এখানে। এটি আইই 9 এবং তার উপরে কাজ করে (সম্ভবত এটিও কম সংস্করণ - আমি এটি পরীক্ষা করে দেখিনি), ফায়ারফক্স, সাফারি এবং ক্রোম। আপনার সাইটটি প্রথমবার ব্যবহার করার পরে একাধিক ফাইল ডাউনলোড করার জন্য ক্রোম ব্যবহারকারীকে তার চুক্তিটি পাওয়ার জন্য একটি বার্তা প্রদর্শন করবে।

function deleteIframe (iframe) {
    iframe.remove(); 
}
function createIFrame (fileURL) {
    var iframe = $('<iframe style="display:none"></iframe>');
    iframe[0].src= fileURL;
    $('body').append(iframe);
    timeout(deleteIframe, 60000, iframe);             
 }
 // This function allows to pass parameters to the function in a timeout that are 
 // frozen and that works in IE9
 function timeout(func, time) {
      var args = [];
      if (arguments.length >2) {
           args = Array.prototype.slice.call(arguments, 2);
      }
      return setTimeout(function(){ return func.apply(null, args); }, time);
 }
 // IE will process only the first one if we put no delay
 var wait = (isIE ? 1000 : 0);
 for (var i = 0; i < files.length; i++) {  
      timeout(createIFrame, wait*i, files[i]);
 }

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


4

Iframe এর একটি jQuery সংস্করণ উত্তর:

function download(files) {
    $.each(files, function(key, value) {
        $('<iframe></iframe>')
            .hide()
            .attr('src', value)
            .appendTo($('body'))
            .load(function() {
                var that = this;
                setTimeout(function() {
                    $(that).remove();
                }, 100);
            });
    });
}

প্রত্যেকে একটি অ্যারের সন্ধান করছে। এটি কাজ করবে: download(['http://nogin.info/cv.doc','http://nogin.info/cv.doc']);তবে এটি চিত্র ফাইলগুলি ডাউনলোড করার জন্য কাজ করে না।
তেহলিভি

3

কৌণিক সমাধান:

এইচটিএমএল

    <!doctype html>
    <html ng-app='app'>
        <head>
            <title>
            </title>
            <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
            <link rel="stylesheet" href="style.css">
        </head>
        <body ng-cloack>        
            <div class="container" ng-controller='FirstCtrl'>           
              <table class="table table-bordered table-downloads">
                <thead>
                  <tr>
                    <th>Select</th>
                    <th>File name</th>
                    <th>Downloads</th>
                  </tr>
                </thead>
                <tbody>
                  <tr ng-repeat = 'tableData in tableDatas'>
                    <td>
                        <div class="checkbox">
                          <input type="checkbox" name="{{tableData.name}}" id="{{tableData.name}}" value="{{tableData.name}}" ng-model= 'tableData.checked' ng-change="selected()">
                        </div>
                    </td>
                    <td>{{tableData.fileName}}</td>
                    <td>
                        <a target="_self" id="download-{{tableData.name}}" ng-href="{{tableData.filePath}}" class="btn btn-success pull-right downloadable" download>download</a>
                    </td>
                  </tr>              
                </tbody>
              </table>
                <a class="btn btn-success pull-right" ng-click='downloadAll()'>download selected</a>

                <p>{{selectedone}}</p>
            </div>
            <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
            <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
            <script src="script.js"></script>
        </body>
    </html>

app.js

var app = angular.module('app', []);            
app.controller('FirstCtrl', ['$scope','$http', '$filter', function($scope, $http, $filter){

$scope.tableDatas = [
    {name: 'value1', fileName:'file1', filePath: 'data/file1.txt', selected: true},
    {name: 'value2', fileName:'file2', filePath: 'data/file2.txt', selected: true},
    {name: 'value3', fileName:'file3', filePath: 'data/file3.txt', selected: false},
    {name: 'value4', fileName:'file4', filePath: 'data/file4.txt', selected: true},
    {name: 'value5', fileName:'file5', filePath: 'data/file5.txt', selected: true},
    {name: 'value6', fileName:'file6', filePath: 'data/file6.txt', selected: false},
  ];  
$scope.application = [];   

$scope.selected = function() {
    $scope.application = $filter('filter')($scope.tableDatas, {
      checked: true
    });
}

$scope.downloadAll = function(){
    $scope.selectedone = [];     
    angular.forEach($scope.application,function(val){
       $scope.selectedone.push(val.name);
       $scope.id = val.name;        
       angular.element('#'+val.name).closest('tr').find('.downloadable')[0].click();
    });
}         


}]);

কাজের উদাহরণ: https://plnkr.co/edit/XynXRS7c742JPfCA3IpE?p= পূর্বরূপ


1

@ দিমিত্রি নোগিনের উত্তরটির উন্নতি করতে: এটি আমার ক্ষেত্রে কাজ করেছে।

তবে এটি পরীক্ষা করা হয়নি, যেহেতু আমি নিশ্চিত নই যে ফাইল ও ডায়ালগটি বিভিন্ন ওএস / ব্রাউজার সংমিশ্রণে কীভাবে কাজ করে। (সুতরাং সম্প্রদায় উইকি।)

<script>
$('#download').click(function () {
    download(['http://www.arcelormittal.com/ostrava/doc/cv.doc', 
              'http://www.arcelormittal.com/ostrava/doc/cv.doc']);
});

var download = function (ar) {
    var prevfun=function(){};
    ar.forEach(function(address) {  
        var pp=prevfun;
        var fun=function() {
                var iframe = $('<iframe style="visibility: collapse;"></iframe>');
                $('body').append(iframe);
                var content = iframe[0].contentDocument;
                var form = '<form action="' + address + '" method="POST"></form>';
                content.write(form);
                $(form).submit();
                setTimeout(function() {    
                    $(document).one('mousemove', function() { //<--slightly hacky!
                        iframe.remove();
                        pp();
                    });
                },2000);
        }
        prevfun=fun; 
      });
      prevfun();   
}
</script>

1

এটি সমস্ত ব্রাউজারগুলিতে কাজ করে (আই 11, ফায়ারফক্স, এজ, ক্রোম এবং ক্রোম মোবাইল) আমার নথিগুলি একাধিক নির্বাচিত উপাদানগুলিতে রয়েছে। আপনি যখন খুব দ্রুত এটি করার চেষ্টা করেন ব্রাউজারগুলিতে সমস্যা রয়েছে বলে মনে হয় ... তাই আমি একটি সময়সীমা ব্যবহার করেছি।

//user clicks a download button to download all selected documents
$('#downloadDocumentsButton').click(function () {
    var interval = 1000;
    //select elements have class name of "document"
    $('.document').each(function (index, element) {
        var doc = $(element).val();
        if (doc) {
            setTimeout(function () {
                window.location = doc;
            }, interval * (index + 1));
        }
    });
});

এটি এমন একটি সমাধান যা প্রতিশ্রুতি ব্যবহার করে:

 function downloadDocs(docs) {
        docs[0].then(function (result) {
            if (result.web) {
                window.open(result.doc);
            }
            else {
                window.location = result.doc;
            }
            if (docs.length > 1) {
                setTimeout(function () { return downloadDocs(docs.slice(1)); }, 2000);
            }
        });
    }

 $('#downloadDocumentsButton').click(function () {
        var files = [];
        $('.document').each(function (index, element) {
            var doc = $(element).val();
            var ext = doc.split('.')[doc.split('.').length - 1];

            if (doc && $.inArray(ext, docTypes) > -1) {
                files.unshift(Promise.resolve({ doc: doc, web: false }));
            }
            else if (doc && ($.inArray(ext, webTypes) > -1 || ext.includes('?'))) {
                files.push(Promise.resolve({ doc: doc, web: true }));
            }
        });

        downloadDocs(files);
    });

1

এখন পর্যন্ত সবচেয়ে সহজ সমাধান (কমপক্ষে উবুন্টু / লিনাক্সে):

  • ডাউনলোড করার জন্য ফাইলগুলির ইউআরএল দিয়ে একটি টেক্সট ফাইল তৈরি করুন (ie file.txt)
  • যে ডিরেক্টরিতে আপনি ফাইল ডাউনলোড করতে চান সেখানে 'file.txt' রাখুন
  • পূর্ববর্তী লিন থেকে ডাউনলোড ডিরেক্টরিতে টার্মিনালটি খুলুন
  • 'wget -i file.txt' কমান্ড দিয়ে ফাইলগুলি ডাউনলোড করুন

একটি যাদুমন্ত্র মত কাজ করে.


আমি কেন বুঝতে পারছি না যে এটি নিম্নচাপিত হচ্ছে। এটি নিখুঁতভাবে কাজ করে, আপনাকে অনেক ধন্যবাদ।
মার্টিন ফারহলজ 30:39

1

এটি সমাধান করার জন্য, আমি ক্লায়েন্ট-সাইডে সরাসরি এক জিপতে একাধিক ফাইল প্রবাহিত করতে একটি জেএস লাইব্রেরি তৈরি করেছি। প্রধান অনন্য বৈশিষ্ট্যটি হ'ল এর মেমরি থেকে কোনও আকারের সীমা থাকে না (সমস্ত কিছুই প্রবাহিত হয়) বা জিপ ফর্ম্যাট হয় না (বিষয়বস্তু 4 জিবি থেকে বেশি হলে এটি জিপ 64 ব্যবহার করে)।

যেহেতু এটি সংক্ষেপণ করে না, এটি খুব পারফরম্যান্ট।

এ "downzip" শব্দ দিয়ে খুঁজে npm বা GitHub !


1

নিম্নলিখিত স্ক্রিপ্টটি নিখুঁতভাবে এই কাজটি করেছে।

var urls = [
'https://images.pexels.com/photos/432360/pexels-photo-432360.jpeg',
'https://images.pexels.com/photos/39899/rose-red-tea-rose-regatta-39899.jpeg'
];

function downloadAll(urls) {


  for (var i = 0; i < urls.length; i++) {
    forceDownload(urls[i], urls[i].substring(urls[i].lastIndexOf('/')+1,urls[i].length))
  }
}
function forceDownload(url, fileName){
    var xhr = new XMLHttpRequest();
    xhr.open("GET", url, true);
    xhr.responseType = "blob";
    xhr.onload = function(){
        var urlCreator = window.URL || window.webkitURL;
        var imageUrl = urlCreator.createObjectURL(this.response);
        var tag = document.createElement('a');
        tag.href = imageUrl;
        tag.download = fileName;
        document.body.appendChild(tag);
        tag.click();
        document.body.removeChild(tag);
    }
    xhr.send();
}

0

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

আপনার যদি সার্ভারে ফাইল সঞ্চিত থাকে (আমি না) তবে আপনি কেবল এসভিজিতে href সেট করতে পারেন।

আমার ক্ষেত্রে, আমি ফাইলগুলি বেস 64 এ রূপান্তর করব এবং সেগুলিকে এসভিজিতে এম্বেড করব।

সম্পাদনা: এসভিজি খুব ভাল কাজ করেছে। আপনি যদি কেবল ফাইলগুলি ডাউনলোড করতে যাচ্ছেন তবে জিপ আরও ভাল হতে পারে। আপনি যদি ফাইলগুলি প্রদর্শন করতে যাচ্ছেন তবে এসভিজিকে উচ্চতর বলে মনে হচ্ছে।


0

আজাক্স উপাদান ব্যবহার করার সময় একাধিক ডাউনলোড শুরু করা সম্ভব। সুতরাং আপনাকে https://cwiki.apache.org/confluence/display/WICKET/AJAX+update+ এবং++ ফাইল + ডাউনলোড + ইন + একো + ব্লো ব্যবহার করতে হবে

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

        button = new AjaxButton("button2") {

        private static final long serialVersionUID = 1L;

        @Override
        protected void onSubmit(AjaxRequestTarget target, Form<?> form)
        {
            MultiSitePage.this.info(this);
            target.add(form);

            form.add(new AbstractAjaxTimerBehavior(Duration.milliseconds(1)) {

                @Override
                protected void onTimer(AjaxRequestTarget target) {
                    download.initiate(target);
                }

            });     
        }

ডাউনলোড হ্যাপি!


javascrpt?!?!?!?!?!
নীলজাইকে

0

কোডের নীচে 100% কাজ করছে।

পদক্ষেপ 1 : index.html ফাইলে কোডের নীচে আটকান

<!DOCTYPE html>
<html ng-app="ang">

<head>
    <title>Angular Test</title>
    <meta charset="utf-8" />
</head>

<body>
    <div ng-controller="myController">
        <button ng-click="files()">Download All</button>
    </div>

    <script src="angular.min.js"></script>
    <script src="index.js"></script>
</body>

</html>

পদক্ষেপ 2 : index.js ফাইলে কোডের নীচে আটকান

"use strict";

var x = angular.module('ang', []);

    x.controller('myController', function ($scope, $http) {
        var arr = [
            {file:"http://localhost/angularProject/w3logo.jpg", fileName: "imageone"},
            {file:"http://localhost/angularProject/cv.doc", fileName: "imagetwo"},
            {file:"http://localhost/angularProject/91.png", fileName: "imagethree"}
        ];

        $scope.files = function() {
            angular.forEach(arr, function(val, key) {
                $http.get(val.file)
                .then(function onSuccess(response) {
                    console.log('res', response);
                    var link = document.createElement('a');
                    link.setAttribute('download', val.fileName);
                    link.setAttribute('href', val.file);
                    link.style.display = 'none';
                    document.body.appendChild(link);
                    link.click(); 
                    document.body.removeChild(link);
                })
                .catch(function onError(error) {
                    console.log('error', error);
                })
            })
        };
    });

দ্রষ্টব্য : ডাউনলোড করতে যাওয়া তিনটি ফাইলই কৌণিক প্রজেক্ট / সূচক html বা কৌণিক প্রকল্প / সূচক.জেএস ফাইলের সাথে একই ফোল্ডারে স্থাপন করা হবে তা নিশ্চিত করুন ।


আপনি কি রিলি হাঁটু আইং [শেষ এয়ারবেন্ডার] থুইসের জন্য ইউলার / ???
নীলজাইকে

0

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

  $.ajax({
        type: "POST",
        url: URL,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        data: data,
        async: true,
        cache: false,
        beforeSend: function () {
            blockUI("body");
        },
        complete: function () { unblockUI("body"); },
        success: function (data) {
           //here data --> contains list of urls with comma seperated
            var listUrls= data.DownloadFilePaths.split(',');
            listUrls.forEach(function (url) {
                $.fileDownload(url);
            });
            return false; 
        },
        error: function (result) {
            $('#mdlNoDataExist').modal('show');
        }

    });

0

আমি যেভাবে করি সেভাবেই এখানে। আমি একাধিক জিপ খুলি তবে অন্যান্য ধরণের ডেটা (আমি পিডিএফ এবং একই সাথে নথির সাথে অনেকগুলি জিপ রফতানি করি)।

আমি কেবল আমার কোডের পূর্ববর্তী অংশটি অনুলিপি করছি। একটি তালিকার একটি বোতাম থেকে কল:

$url_pdf = "pdf.php?id=7";
$url_zip1 = "zip.php?id=8";
$url_zip2 = "zip.php?id=9";
$btn_pdf = "<a href=\"javascript:;\" onClick=\"return open_multiple('','".$url_pdf.",".$url_zip1.",".$url_zip2."');\">\n";
$btn_pdf .= "<img src=\"../../../images/icones/pdf.png\" alt=\"Ver\">\n";
$btn_pdf .= "</a>\n"

সুতরাং জেএস রুটিনের একটি বেসিক কল (ভ্যানিলা নিয়ম!)। এখানে জেএস রুটিন:

 function open_multiple(base,url_publication)
 {
     // URL of pages to open are coma separated
     tab_url = url_publication.split(",");
     var nb = tab_url.length;
     // Loop against URL    
     for (var x = 0; x < nb; x++)
     {
        window.open(tab_url[x]);
      }

     // Base is the dest of the caller page as
     // sometimes I need it to refresh
     if (base != "")
      {
        window.location.href  = base;
      }
   }

কৌশলটি হ'ল জিপ ফাইলের সরাসরি লিঙ্কটি না দিয়ে ব্রাউজারে প্রেরণ করা। এটার মত:

  $type_mime = "application/zip, application/x-compressed-zip";
 $the_mime = "Content-type: ".$type_mime;
 $tdoc_size = filesize ($the_zip_path);
 $the_length = "Content-Length: " . $tdoc_size;
 $tdoc_nom = "Pesquisa.zip";
 $the_content_disposition = "Content-Disposition: attachment; filename=\"".$tdoc_nom."\"";

  header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
  header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");   // Date in the past
  header($the_mime);
  header($the_length);
  header($the_content_disposition);

  // Clear the cache or some "sh..." will be added
  ob_clean();
  flush();
  readfile($the_zip_path);
  exit();

-1
           <p class="style1">



<a onclick="downloadAll(window.links)">Balance Sheet Year 2014-2015</a>

</p>

<script>
 var links = [
  'pdfs/IMG.pdf',
  'pdfs/IMG_0001.pdf',
 'pdfs/IMG_0002.pdf',
 'pdfs/IMG_0003.pdf',
'pdfs/IMG_0004.pdf',
'pdfs/IMG_0005.pdf',
 'pdfs/IMG_0006.pdf'

];

function downloadAll(urls) {
  var link = document.createElement('a');

  link.setAttribute('download','Balance Sheet Year 2014-2015');
  link.style.display = 'none';

  document.body.appendChild(link);

  for (var i = 0; i < urls.length; i++) {
    link.setAttribute('href', urls[i]);
    link.click();
  }

  document.body.removeChild(link);
}
</script>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.