পৃষ্ঠাটি সরিয়ে না রেখে ডাউনলোড উইন্ডো খোলার সহজ উপায়


118

ডাউনলোড ডায়লগ খোলার সর্বোত্তম ক্রস ব্রাউজার কী কী (চলুন ধরে নেওয়া যাক আমরা কন্টেন্ট-ডিসপোশন সেট করতে পারি: হেডারে সংযুক্তি) বর্তমান পৃষ্ঠা থেকে সরে না গিয়ে বা পপআপগুলি খোলার জন্য, যা ইন্টারনেট এক্সপ্লোরারে ভাল কাজ করে না (IE) ) 6।

উত্তর:


106

7 বছর কেটে গেছে এবং আমি জানি না এটি আই 6 এর জন্য কাজ করে কিনা বা না, তবে এটি এফএফ এবং ক্রোমে ওপেনফাইলডায়লগকে অনুরোধ করে।

var file_path = 'host/path/file.ext';
var a = document.createElement('A');
a.href = file_path;
a.download = file_path.substr(file_path.lastIndexOf('/') + 1);
document.body.appendChild(a);
a.click();
document.body.removeChild(a);

প্রথমে এই সমাধানের জন্য আপনাকে ধন্যবাদ, তবে আমি একটি বাগ পেয়েছি যদি অপসারণচিল্ড (ক) জিপটি জিপ থেকে আনজিপ ত্রুটি বিভক্ত হয়ে যায়, তাই এই কোডটি সমাধান করুন
রায়

2
@ মনোজ রানা - আমি এফএফ 58.0.2 (64-বিট) এ কাজ করে যাচাই করেছি। আপনি যদি 2 লাইন ডকুমেন্ট.বডি.পেন্ডচিল্ড (ক) সরিয়ে ফেলেন তবে এটি কোনও এফএফ-তে কাজ করবে না ; document.body.removeChild (ক);
0x000f

1
এটি এজ 16 এ কাজ করতে শিরোনামে, ফাইলটি আসে সেখান থেকে Content-Type: application/octet-streamএবং থাকা উচিত Content-Disposition: attachment
সাইমন

12
এই স্বল্পতা কাজ আর developers.google.com/web/updates/2018/02/...
Paulius Dragunas

2
@ ব্যবহারকারী1933131 ক্রোম কেবল ক্রস-
অরিজিনের

200

এই জাভাস্ক্রিপ্টটি দুর্দান্ত যে এটি কোনও নতুন উইন্ডো বা ট্যাব খুলবে না।

window.location.assign(url);

17
এটি উইন্ডো হিসাবে একই। লোকেশন = url; "যখনই লোকেশন অবজেক্টে কোনও নতুন মান বরাদ্দ করা হবে তখন ইউআরএলটি ব্যবহার করে একটি ডকুমেন্ট লোড করা হবে যেন উইন্ডো.লোকেশন.সাইনাইন () পরিবর্তিত ইউআরএল দিয়ে ডেকে আনা হয়েছে" - বিকাশকারী.মোজিলা.আর.ইন-
রব জুউরলিংক

13
এর ফলে ওয়েবসকেট সংযোগ বিচ্ছিন্ন হয়ে যায়।
igorpavlov

4
আমি একই সমাধান ব্যবহার করেছি তবে এটি ডাউনলোড ডায়ালগ খোলার পরিবর্তে একই ট্যাবে ফাইল খুলবে।
টেকনো ক্র্যাকার

2
এটি উইন্ডো.ওপেন (ইউআরএল, '_সেলফ') এর মতো তবে যদি ইউআরএল ডাউনলোড পৃষ্ঠায় থাকে তবে then
বিশেষজ্ঞ চান

5
আইই 11 ব্যবহার করার সময় আমি দেখতে পেলাম যে এর ফলে জেএস বন্ধ হয়ে গেছে। আইই 11 এর জন্য আমি উইন্ডো.ওপেন (ইউআরএল, '_ব্ল্যাঙ্ক') ব্যবহার করেছি যা অন্য ট্যাবটি খুলেছে, তবে ফাইলটি কাজ করার পরে সেই ট্যাবটি বন্ধ হয়ে গেছে a এটি জেএসকে চালিয়ে রেখেছিল।
লুক

23

আমি সর্বদা ডাউনলোড লিঙ্কে একটি লক্ষ্য = "_ ফাঁকা" যুক্ত করি। এটি একটি নতুন উইন্ডো খুলবে, তবে ব্যবহারকারী সংরক্ষণ সংরক্ষণের সাথে সাথেই নতুন উইন্ডোটি বন্ধ হয়ে যাবে।


2
এটি সেরা উত্তর। ইন্টারনেট এক্সপ্লোরারে, ডাউনলোড করতে হবে এমন একটি লিঙ্কে 'টার্গেট = "_ ফাঁকা" "যুক্ত করা ব্রাউজারটিকে চলাচল বন্ধ করে দেবে (যেখানে" এইচটিএমএল 1300: নেভিগেশন ঘটেছে "মুদ্রিত হবে) এবং এভাবে পৃষ্ঠাটি অসঙ্গতিপূর্ণ অবস্থায় ছেড়ে যেতে পারে।
ব্যবহারকারী 64141

23

urlএটি ডাউনলোড করতে হবে এমন ফাইলের URL টিতে URL সেট করে, এইচটিএমএল হেড বিভাগে রাখুন :

<script type="text/javascript">  
function startDownload()  
{  
     var url='http://server/folder/file.ext';    
     window.open(url, 'Download');  
}  
</script>

তারপরে এটি শরীরে রাখুন, যা 5 সেকেন্ড পরে স্বয়ংক্রিয়ভাবে ডাউনলোড শুরু হবে:

<script type="text/javascript">  
setTimeout('startDownload()', 5000); //starts download after 5 seconds  
</script> 

(এইখান থেকে এখানে ।)


2
এটি কাজ করে না, কারণ আইআই 6-তে ব্যবহারকারী যদি ফাইলটি সংরক্ষণ করে "সেভ করুন" ক্লিক করে তবে পপআপ খোলা থাকে। এটি গ্রহণযোগ্য নয়।
mkoryak

এই কোডটি সাফারিটিতে কাজ করছে না আপনি কি সাফারি সমাধান করতে আমাকে সহায়তা করতে পারেন দয়া করে।
রিনিশ খুন্ট

17

আমি জানি প্রশ্নটি জিজ্ঞাসা করা হয়েছিল 7 years and 9 months agoকিন্তু অনেক পোস্ট সমাধানগুলি কাজ করে বলে মনে হয় না, উদাহরণস্বরূপ <iframe>কেবল একটি কাজ ব্যবহার করে FireFoxএবং এটি দিয়ে কাজ করে না Chrome

সব থেকে ভালো সমাধান:

একটি ফাইল ডাউনলোড পপ-আপ খোলার সর্বোত্তম কার্যক্ষম সমাধানJavaScript হ'ল একটি HTMLলিঙ্ক উপাদান ব্যবহার করা , অন্য উত্তরগুলিতে বর্ণিত হিসাবে লিঙ্ক উপাদানটি যুক্ত করার দরকার নেইdocument.body

আপনি নিম্নলিখিত ফাংশন ব্যবহার করতে পারেন:

function downloadFile(filePath){
    var link=document.createElement('a');
    link.href = filePath;
    link.download = filePath.substr(filePath.lastIndexOf('/') + 1);
    link.click();
}

আমার প্রয়োগে, আমি এটি এইভাবে ব্যবহার করছি:

downloadFile('report/xls/myCustomReport.xlsx');

ওয়ার্কিং ডেমো:

বিঃদ্রঃ:

  • আপনাকে link.downloadঅ্যাট্রিবিউটটি ব্যবহার করতে হবে যাতে ব্রাউজারটি কোনও নতুন ট্যাবে ফাইলটি খোলায় না এবং ডাউনলোড পপ-আপকে জ্বালিয়ে দেয়।
  • এটি বেশ কয়েকটি ফাইলের ধরণের (ডকএক্স, এক্সএলএক্সএক্স, পিএনজি, পিডিএফ, ...) দিয়ে পরীক্ষা করা হয়েছিল।

ফাইল ডাউনলোড না হওয়া অবধি লোডিং জিআইএফ প্রদর্শনের সর্বোত্তম উপায় কী হবে?
Ctrl_Alt_Defeat

1
@Ctrl_Alt_Defeat আচ্ছা এই ক্ষেত্রে এটি download পদ্ধতি ট্র্যাক করতে সহজ হবে না, কিন্তু এক কৌতুক এই GIF অ্যানিমেশন দেখানোর জন্য হতে পারে linkক্লিক করুন এবং একটি সময়সীমার পর গোপন, এই কোড ব্যবহার করছে: link.onclick = function() { document.body.innerText = "The file is being downloaded ..."; setTimeout(function() { document.body.innerText = ""; }, 2000); }, আপনি এটি কাজ দেখতে পারেন মধ্যে এই ভাজা , তবে মনে রাখবেন এটি করার কোনও প্রস্তাবিত উপায় নয়, আমরা যদি এটি ব্যবহার করি তবে এটি আরও ভালভাবে পরিচালনা করা হবে Ajax
সিড্ক

1
এটি ফায়ারফক্সে কাজ করে না। ফায়ার ফক্সে ডাউনলোড করবেন কীভাবে?
মনোজ রানা

@ মনোজরানা ফায়ারফক্সের জন্য, আপনি এই উত্তরটিiframe দেখতে ব্যবহার করতে পারেন ।
সিড্ক

2
এই সমাধানটি আমার জন্য ক্রোম, সাফারি এবং ফায়ারফক্সে কাজ করে :)
আরিবিয়ার ২

15

এই প্রশ্নটি যেমনটি দেখায় ঠিক তেমন একটি ফাইল ডাউনলোড শুরু করার জন্য আমি জাভাস্ক্রিপ্ট ব্যবহার করার জন্য একটি ভাল উপায় খুঁজছি। তবে এই উত্তরগুলি সহায়ক হয়নি। তারপরে আমি কিছু এক্সব্রোজার টেস্টিং করেছি এবং দেখতে পেয়েছি যে একটি আইফ্রেমে সমস্ত আধুনিক ব্রাউজারে IE> 8 এ সেরা কাজ করে।

downloadUrl = "http://example.com/download/file.zip";
var downloadFrame = document.createElement("iframe"); 
downloadFrame.setAttribute('src',downloadUrl);
downloadFrame.setAttribute('class',"screenReaderText"); 
document.body.appendChild(downloadFrame); 

class="screenReaderText" স্টাইলের সামগ্রীতে আমার শ্রেণি যা উপস্থিত তবে দেখা যায় না।

CSS:

.screenReaderText { 
  border: 0; 
  clip: rect(0 0 0 0); 
  height: 1px; 
  margin: -1px; 
  overflow: hidden; 
  padding: 0; 
  position: absolute; 
  width: 1px; 
}

.visally html5boilerplate এ লুকানো হিসাবে একই

আমি এটি জাভাস্ক্রিপ্ট উইন্ডো.ওপেন পদ্ধতিতে পছন্দ করি কারণ লিঙ্কটি যদি ভাঙা হয় তবে কেবল খালি পৃষ্ঠায় পুনর্নির্দেশের বিরোধিতা হিসাবে ফাইলটি খুলতে পারে না বলে কিছু না করে।

window.open(downloadUrl, 'download_window', 'toolbar=0,location=no,directories=0,status=0,scrollbars=0,resizeable=0,width=1,height=1,top=0,left=0');
window.focus();

6

এইচটিএমএল 5 ব্লব অবজেক্ট-ইউআরএল ফাইল এপিআই ব্যবহার করে :

/**
 * Save a text as file using HTML <a> temporary element and Blob
 * @see /programming/49988202/macos-webview-download-a-html5-blob-file
 * @param fileName String
 * @param fileContents String JSON String
 * @author Loreto Parisi
*/
var saveBlobAsFile = function(fileName,fileContents) {
    if(typeof(Blob)!='undefined') { // using Blob
        var textFileAsBlob = new Blob([fileContents], { type: 'text/plain' });
        var downloadLink = document.createElement("a");
        downloadLink.download = fileName;
        if (window.webkitURL != null) {
            downloadLink.href = window.webkitURL.createObjectURL(textFileAsBlob);
        }
        else {
            downloadLink.href = window.URL.createObjectURL(textFileAsBlob);
            downloadLink.onclick = document.body.removeChild(event.target);
            downloadLink.style.display = "none";
            document.body.appendChild(downloadLink);
        }
        downloadLink.click();
    } else {
        var pp = document.createElement('a');
        pp.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(fileContents));
        pp.setAttribute('download', fileName);
        pp.onclick = document.body.removeChild(event.target);
        pp.click();
    }
}//saveBlobAsFile

/**
 * Save a text as file using HTML <a> temporary element and Blob
 * @see /programming/49988202/macos-webview-download-a-html5-blob-file
 * @param fileName String
 * @param fileContents String JSON String
 * @author Loreto Parisi
 */
var saveBlobAsFile = function(fileName, fileContents) {
  if (typeof(Blob) != 'undefined') { // using Blob
    var textFileAsBlob = new Blob([fileContents], {
      type: 'text/plain'
    });
    var downloadLink = document.createElement("a");
    downloadLink.download = fileName;
    if (window.webkitURL != null) {
      downloadLink.href = window.webkitURL.createObjectURL(textFileAsBlob);
    } else {
      downloadLink.href = window.URL.createObjectURL(textFileAsBlob);
      downloadLink.onclick = document.body.removeChild(event.target);
      downloadLink.style.display = "none";
      document.body.appendChild(downloadLink);
    }
    downloadLink.click();
  } else {
    var pp = document.createElement('a');
    pp.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(fileContents));
    pp.setAttribute('download', fileName);
    pp.onclick = document.body.removeChild(event.target);
    pp.click();
  }
} //saveBlobAsFile

var jsonObject = {
  "name": "John",
  "age": 31,
  "city": "New York"
};
var fileContents = JSON.stringify(jsonObject, null, 2);
var fileName = "data.json";

saveBlobAsFile(fileName, fileContents)


2
আমি এটি এটি করার সেরা উপায় মনে করি !!
কুশল এমকে

1
কল করাও এটি একটি ভাল অনুশীলন URL.revokeObjectURL(url), যখন ফাইলটির আর স্মৃতি মুক্ত করার দরকার নেই
স্লিপওয়াকার

5

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

এইচটিএমএল

<input type="button" onclick="downloadButtonClicked()" value="Download"/>
...
...
...
<iframe style="display:none;" name="hiddenIframe" id="hiddenIframe"></iframe>

জাভাস্ক্রিপ্ট

function downloadButtonClicked() {
    // Simulate a link click
    var url = 'your_download_url_here';
    var elem = document.createElement('a');
    elem.href = url;
    elem.target = 'hiddenIframe';
    elem.click();
}

5

লিঙ্কটি যদি কোনও বৈধ ফাইল ইউআরএল হয়, তবে কেবল উইন্ডো.লোকেশন.রেফ বরাদ্দকরণ কাজ করবে।

যাইহোক, কখনও কখনও লিঙ্কটি বৈধ হয় না, এবং একটি আইফ্রেম প্রয়োজন হয়।

উইন্ডোটি খোলার থেকে রোধ করতে আপনার সাধারণ ইভেন্ট.প্রিভেন্টডাফল্টটি করুন এবং আপনি যদি jQuery ব্যবহার করেন তবে এটি কাজ করবে:

$('<iframe>').attr('src', downloadThing.attr('href')).appendTo('body').on("load", function() {
   $(this).remove();
});

2

কয়েক ঘন্টা চেষ্টা করার পরে, ফাংশনটির জন্ম হয় :) ফাইলটি ডাউনলোডের জন্য প্রস্তুত হওয়ার সময় আমাকে সময় মতো লোডার প্রদর্শন করতে হয়েছিল:

ক্রোম, সাফারি এবং ফায়ারফক্সে কাজ করা

function ajaxDownload(url, filename = 'file', method = 'get', data = {}, callbackSuccess = () => {}, callbackFail = () => {}) {
    $.ajax({
        url: url,
        method: 'GET',
        xhrFields: {
            responseType: 'blob'
        },
        success: function (data) {
            // create link element
            let a = document.createElement('a'), 
                url = window.URL.createObjectURL(data);

            // initialize 
            a.href = url;
            a.download = filename;

            // append element to the body, 
            // a must, due to Firefox
            document.body.appendChild(a);

            // trigger download
            a.click();

            // delay a bit deletion of the element
            setTimeout(function(){
                window.URL.revokeObjectURL(url);
                document.body.removeChild(a);
            }, 100);

            // invoke callback if any 
            callbackSuccess(data);
        },
        error: function (err) {
            // invoke fail callback if any
            callbackFail(err)
        }
    });

0

কেমন:

<meta http-equiv="refresh" content="5;url=http://site.com/file.ext">

এই উপায়টি সমস্ত ব্রাউজারগুলিতে কাজ করে (আমি মনে করি) এবং আপনাকে একটি বার্তা দিতে দিন: "ডাউনলোড যদি পাঁচ সেকেন্ডের মধ্যে না শুরু হয় তবে এখানে ক্লিক করুন।"

আপনার যদি জাভাস্ক্রিপ্টের সাথে থাকতে হয় তবে ভাল ...

document.write('<meta http-equiv="refresh" content="5;url=http://site.com/file.ext">');

শুভেচ্ছা সহ


0

একটি ছোট / লুকানো ইফ্রেমে এই উদ্দেশ্যে কাজ করতে পারে।

এইভাবে আপনাকে পপ আপ বন্ধ করার বিষয়ে চিন্তা করতে হবে না।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.