উত্তর:
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);
Content-Type: application/octet-streamএবং থাকা উচিত Content-Disposition: attachment।
এই জাভাস্ক্রিপ্টটি দুর্দান্ত যে এটি কোনও নতুন উইন্ডো বা ট্যাব খুলবে না।
window.location.assign(url);
আমি সর্বদা ডাউনলোড লিঙ্কে একটি লক্ষ্য = "_ ফাঁকা" যুক্ত করি। এটি একটি নতুন উইন্ডো খুলবে, তবে ব্যবহারকারী সংরক্ষণ সংরক্ষণের সাথে সাথেই নতুন উইন্ডোটি বন্ধ হয়ে যাবে।
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>
(এইখান থেকে এখানে ।)
আমি জানি প্রশ্নটি জিজ্ঞাসা করা হয়েছিল 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অ্যাট্রিবিউটটি ব্যবহার করতে হবে যাতে ব্রাউজারটি কোনও নতুন ট্যাবে ফাইলটি খোলায় না এবং ডাউনলোড পপ-আপকে জ্বালিয়ে দেয়।linkক্লিক করুন এবং একটি সময়সীমার পর গোপন, এই কোড ব্যবহার করছে: link.onclick = function() { document.body.innerText = "The file is being downloaded ..."; setTimeout(function() { document.body.innerText = ""; }, 2000); }, আপনি এটি কাজ দেখতে পারেন মধ্যে এই ভাজা , তবে মনে রাখবেন এটি করার কোনও প্রস্তাবিত উপায় নয়, আমরা যদি এটি ব্যবহার করি তবে এটি আরও ভালভাবে পরিচালনা করা হবে Ajax।
এই প্রশ্নটি যেমনটি দেখায় ঠিক তেমন একটি ফাইল ডাউনলোড শুরু করার জন্য আমি জাভাস্ক্রিপ্ট ব্যবহার করার জন্য একটি ভাল উপায় খুঁজছি। তবে এই উত্তরগুলি সহায়ক হয়নি। তারপরে আমি কিছু এক্সব্রোজার টেস্টিং করেছি এবং দেখতে পেয়েছি যে একটি আইফ্রেমে সমস্ত আধুনিক ব্রাউজারে 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();
এইচটিএমএল 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)
URL.revokeObjectURL(url), যখন ফাইলটির আর স্মৃতি মুক্ত করার দরকার নেই
উইন্ডোর অবস্থানটি পরিবর্তন করা কিছু সমস্যার কারণ হতে পারে বিশেষত যখন আপনার ওয়েবসকেটের মতো অবিচ্ছিন্ন সংযোগ থাকে। সুতরাং আমি সবসময় ভাল পুরানো 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();
}
লিঙ্কটি যদি কোনও বৈধ ফাইল ইউআরএল হয়, তবে কেবল উইন্ডো.লোকেশন.রেফ বরাদ্দকরণ কাজ করবে।
যাইহোক, কখনও কখনও লিঙ্কটি বৈধ হয় না, এবং একটি আইফ্রেম প্রয়োজন হয়।
উইন্ডোটি খোলার থেকে রোধ করতে আপনার সাধারণ ইভেন্ট.প্রিভেন্টডাফল্টটি করুন এবং আপনি যদি jQuery ব্যবহার করেন তবে এটি কাজ করবে:
$('<iframe>').attr('src', downloadThing.attr('href')).appendTo('body').on("load", function() {
$(this).remove();
});
কয়েক ঘন্টা চেষ্টা করার পরে, ফাংশনটির জন্ম হয় :) ফাইলটি ডাউনলোডের জন্য প্রস্তুত হওয়ার সময় আমাকে সময় মতো লোডার প্রদর্শন করতে হয়েছিল:
ক্রোম, সাফারি এবং ফায়ারফক্সে কাজ করা
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)
}
});
কেমন:
<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">');
শুভেচ্ছা সহ