আমি ভাবছিলাম কীভাবে পিডিএফ ফাইলের লিঙ্কটি ব্রাউজারে না খোলার পরিবর্তে ডাউনলোডযোগ্য? এইচটিএমএলে এটি কীভাবে হয়? (আমি ধরে নিলাম এটি জাভাস্ক্রিপ্ট বা কোনও কিছুর মাধ্যমে সম্পন্ন হয়েছে)।
আমি ভাবছিলাম কীভাবে পিডিএফ ফাইলের লিঙ্কটি ব্রাউজারে না খোলার পরিবর্তে ডাউনলোডযোগ্য? এইচটিএমএলে এটি কীভাবে হয়? (আমি ধরে নিলাম এটি জাভাস্ক্রিপ্ট বা কোনও কিছুর মাধ্যমে সম্পন্ন হয়েছে)।
উত্তর:
আপনি এইচটিএমএল দিয়ে এটি করতে পারবেন না। এটি একটি সার্ভার-ভিত্তিক সমাধান। আপনাকে ফাইলটি স্ট্রিম করতে হবে যাতে ব্রাউজারটি সেভ ডায়ালগের চেয়ে ট্রিগার করে।
আমি এটি না করার পরামর্শ দিই। কোনও ব্যবহারকারী কীভাবে পিডিএফের সাথে ইন্টারঅ্যাক্ট করে তা ব্যবহারকারীর উপর ছেড়ে দেওয়া উচিত।
আপডেট (2014):
সুতরাং ... এই উত্তরটি এখনও প্রচুর ডাউনওয়েট পায়। এর একটি অংশ আমি ধরে নিই যে এটির উত্তর 4 বছর আগে দেওয়া হয়েছিল এবং যেমন সরিম উল্লেখ করেছেন, এখন এইচটিএমএল 5 downloadবৈশিষ্ট্য রয়েছে যা এটি পরিচালনা করতে পারে।
আমি সম্মত হই, এবং মনে করি সরিমের উত্তর ভাল (ওপি যদি ফিরে আসে তবে সম্ভবত এটি নির্বাচিত উত্তর হওয়া উচিত)। যাইহোক, এই উত্তরটি এখনও এটি হ্যান্ডেল করার নির্ভরযোগ্য উপায় (যেমন ইয়াইট ইয়েনারের উত্তরটি নির্দেশ করে এবং - অদ্ভুতভাবে - লোকেরা এতে সম্মত হয়)। ডাউনলোড অ্যাট্রিবিউটটি সমর্থন অর্জন করার পরেও এটি স্পষ্ট:
httpপ্রশ্নটিতে ট্যাগ যুক্ত করুন । অনুচ্ছেদ 2 পরিবর্তে: "আপনি পুনর্বিবেচনা করা হবে কিনা তা অবিলম্বে পিডিএফ দেখার বাধা সব ব্যবহারকারীদের সেরা স্বার্থে হয় চাইতে পারেন যে বলেন না ...।" তারপর অনুমান ওপি এবং ভবিষ্যতে পাঠকদের প্রাপ্তবয়স্কদের এবং যেমন একটি অভিযোগ্য উত্তর উপর সরানো Yener থেকে এর ।
এইচটিএমএল 5 দিয়ে এখন এটি সম্ভব। উপাদানটিতে একটি "ডাউনলোড" অ্যাটর সেট করুন।
<a href="http://link/to/file" download="FileName">Download it!</a>
উত্স: http://updates.html5rocks.com/2011/08/Downloading-resources-in-HTML5-a-download
if ("download" in document.createElement("a")){ ... }
সার্ভার সাইড কোড দ্বারা একটি HTTP প্রতিক্রিয়া শিরোনাম সেট করেই এটি সম্ভব। যেমন;
Content-Disposition: attachment; filename=fname.ext
আপনাকে প্রেরিত http শিরোনামগুলি পরিবর্তন করতে হবে। আপনার সার্ভারের উপর নির্ভর করে আপনি নীচের হিসাবে আপনার .htaccess পরিবর্তন করতে পারেন:
<FilesMatch "\.(?i:pdf)$">
ForceType application/octet-stream
Header set Content-Disposition attachment
</FilesMatch>
আপনাকে একটি পিএইচপি স্ক্রিপ্ট ব্যবহার করতে হবে (বা এর জন্য কোনও অন্য সার্ভার সাইড ভাষা)
<?php
// We'll be outputting a PDF
header('Content-type: application/pdf');
// It will be called downloaded.pdf
header('Content-Disposition: attachment; filename="downloaded.pdf"');
// The PDF source is in original.pdf
readfile('original.pdf');
?>
এবং পিডিএফের পরিবর্তে পিএইচপি ফাইলে পুনর্নির্দেশ করতে (পুনরায় লিখন) করতে httacces ব্যবহার করুন
http://www.example.com/_PDFs/___download_the_catalogue_instead_opening.phpকরুন এবং পিডিএফ ফাইলটি খোলার চেষ্টা করুন, এটি নাম পরিবর্তিত সংস্করণটি ডাউনলোড করার পরিবর্তে এটি ব্রাউজারে এখনও মূলটি খোলে ...
তুমি ব্যবহার করতে পার
Response.AddHeader("Content-disposition", "attachment; filename=" + Name);
এই উদাহরণটি দেখুন:
http://www.codeproject.com/KB/aspnet/textfile.aspx
এটি ASP.NET এর জন্য যায় for আমি নিশ্চিত যে আপনি অন্যান্য সমস্ত সার্ভার পাশের ভাষায় একই রকম সমাধানগুলি খুঁজে পেতে পারেন। তবে আমার জ্ঞানের সেরাটির কোনও জাভাস্ক্রিপ্ট সমাধান নেই।
এইচটিএমএল 5 বৈশিষ্ট্য ছাড়াই পিএইচপি ব্যবহার করে কেউ এটি অর্জন করতে পারে:
এই কোডটি দিয়ে পিএইচপি ফাইলটি নামযুক্ত download.php তৈরি করুন :
<?php
ob_start();
$file = "yourPDF.pdf"
if (file_exists($file))
{
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit();
}
এখন আপনি যদি স্বয়ংক্রিয়ভাবে পিডিএফ ডাউনলোড শুরু করতে চান তবে এই জাভাস্ক্রিপ্টটি লিখুন:
<script>window.location = "download.php";</script>
আপনি যদি কোনও লিঙ্কে এটি কাজ করতে চান তবে এটি ব্যবহার করুন ...
<a href='javascript:window.location = "download.php"'>
Download it!
</a>
$file = $_GET['$file'];। কারণ এরপরে কেউ কল করতে পারে download.php?file=../../../wp-config.phpবা অন্য কোনও প্রদত্ত সংস্থান। এক্সটেনশানগুলির জন্য অতিরিক্ত চেকিং, মাইম-প্রকার এবং ("../" এর মতো স্ট্রিপিং স্টাফিং) থেকে ডাউনলোড করার অনুমতিপ্রাপ্ত পাথগুলি খুব গুরুত্বপূর্ণ!
<a href='download.php'> ?
যখন আপনি ব্রাউজার থেকে কোনও চিত্র বা পিডিএফ ফাইল সরাসরি নতুন ট্যাবে খোলার পরিবর্তে জাভাস্ক্রিপ্টে ডাউনলোড করতে চান তখন আপনার গতিশীল লিঙ্ক তৈরির বৈশিষ্ট্য ডাউনলোড করার জন্য মান নির্ধারণ করতে হবে
var path= "your file path will be here";
var save = document.createElement('a');
save.href = filePath;
save.download = "Your file name here";
save.target = '_blank';
var event = document.createEvent('Event');
event.initEvent('click', true, true);
save.dispatchEvent(event);
(window.URL || window.webkitURL).revokeObjectURL(save.href);
নতুন ক্রোম আপডেটের জন্য কিছু সময়ের ইভেন্ট কাজ করছে না। নিম্নলিখিত কোড ব্যবহার করা হবে
var path= "your file path will be here";
var save = document.createElement('a');
save.href = filePath;
save.download = "Your file name here";
save.target = '_blank';
document.body.appendChild(save);
save.click();
document.body.removeChild(save);
শিশুকে যুক্ত করা এবং শিশুকে সরিয়ে ফেলা ফায়ারফক্সের জন্য দরকারী, কেবল ইন্টারনেট এক্সপ্লোরার ব্রাউজার। ক্রোম এ এটি সন্তানের সংযোজন এবং অপসারণ ছাড়াই কাজ করবে
যে সমাধানটি আমার পক্ষে সবচেয়ে ভাল কাজ করেছে তা হ'ল নিক তার ব্লগে লিখেছেন
তার সমাধানের মূল ধারণাটি হ'ল অ্যাপাচি সার্ভারের শিরোলেখ মোড ব্যবহার করা এবং একটি ফাইলম্যাচ নির্দেশিকা অন্তর্ভুক্ত করার জন্য .htaccess সম্পাদনা করা যা সমস্ত * .pdf ফাইলগুলিকে সংযুক্তির পরিবর্তে প্রবাহ হিসাবে কাজ করতে বাধ্য করে। যদিও এটিতে আসলে HTML সম্পাদনা জড়িত নেই (মূল প্রশ্ন অনুসারে) এতে প্রতি সেও কোনও প্রোগ্রামিংয়ের প্রয়োজন নেই।
আমি নিকের পদ্ধতির পছন্দকে প্রথম কারণ হ'ল এটি আমাকে প্রতি ফোল্ডার ভিত্তিতে সেট করার অনুমতি দিয়েছে যাতে অন্যদেরকে অনুমতি দেওয়ার সময় একটি ফোল্ডারে থাকা পিডিএফটি এখনও ব্রাউজারে খোলা যেতে পারে (আমরা ব্যবহারকারীরা যা সম্পাদনা করতে চাই এবং পুনরায় আপলোড করতে চাই) ডাউনলোড হিসাবে বাধ্য করা।
আমি আরও যোগ করতে চাই যে পিডিএফগুলির সাথে আপনার সার্ভারে একটি এপিআইয়ের মাধ্যমে প্রাপ্য ফর্মগুলি পোস্ট / জমা দেওয়ার জন্য একটি বিকল্প রয়েছে তবে এটি কার্যকর করতে কিছুটা সময় নেয় takes
দ্বিতীয় কারণটি ছিল কারণ সময়টি বিবেচনা করা। শিরোনামে ()) লিখিত বিষয়বস্তু জোর করতে পিএইচপি ফাইল হ্যান্ডলার লিখতে এপিআইয়ের চেয়ে কম সময় লাগবে, তবে নিকের পদ্ধতির চেয়ে এখনও বেশি সময় লাগবে।
আপনি যদি অ্যাপাচি মোডটি চালু করতে এবং .htaccss সম্পাদনা করতে জানেন তবে আপনি প্রায় 10 মিনিটের মধ্যে এটি পেতে পারেন। এটির জন্য লিনাক্স হোস্টিং প্রয়োজন (উইন্ডোজ নয়)। এটি সমস্ত ব্যবহারের জন্য উপযুক্ত পদ্ধতির নাও হতে পারে কারণ এটি কনফিগার করতে উচ্চ স্তরের সার্ভার অ্যাক্সেস প্রয়োজন। যেমন, আপনি যদি অ্যাক্সেসের কথা বলে থাকেন তবে সম্ভবত এটি কারণ আপনি ইতিমধ্যে জানেন যে এই দুটি জিনিস কীভাবে করা যায়। যদি তা না হয় তবে আরও নির্দেশাবলীর জন্য নিকের ব্লগটি চেক করুন।
যেহেতু এইচটিএমএল 5 উপায় (আমার পূর্ববর্তী উত্তর) সমস্ত ব্রাউজারগুলিতে উপলব্ধ নেই, তাই অন্য একটি সামান্য হ্যাক উপায়।
এই সমাধানটির প্রয়োজন হয় আপনি একই ডোমেন থেকে উদ্দেশ্যযুক্ত ফাইলটি পরিবেশন করছেন, বা CORS অনুমতি রয়েছে।
application/octet-stream। ফলাফল দেখতে হবেdata:application/octet-stream;base64,SGVsbG8sIFdvcmxkIQ%3D%3D
এখন সেট করুন location.href = data। এর ফলে ব্রাউজারটি ফাইলটি ডাউনলোড করবে। দুর্ভাগ্যক্রমে আপনি এইভাবে ফাইলের নাম বা এক্সটেনশান সেট করতে পারবেন না। মিডিয়া-টাইপের সাথে ফিডিং কিছু উপার্জন করতে পারে।
বিশদটি দেখুন: https://developer.mozilla.org/en-US/docs/Web/HTTP/data_URIs
একটি নির্দিষ্ট ফোল্ডারে ডায়নামিক নামের সাথে তৈরি এবং আইআইএস দ্বারা পরিবেশন করা ফাইলগুলির জন্য আমার এটি করা দরকার।
এটি আমার পক্ষে কাজ করেছে:
নিম্নলিখিত তথ্য সহ একটি নতুন শিরোনাম যুক্ত করুন:
Name: content-disposition
Value: attachment
(থেকে: http://forums.iis.net/t/1175103.aspx?add+ কাস্টমহাইডার্স + মাত্র +++++++++++++++++++ )
আপনি যদি এইচটিএমএল 5 ব্যবহার করছেন (এবং আমি এখন অনুমান করি যে দিনগুলি সবাই এটি ব্যবহার করে), সেখানে একটি বৈশিষ্ট্য বলে download।
প্রাক্তন।
<a href="somepathto.pdf" download="filename">
এখানে filenameisচ্ছিক, তবে যদি সরবরাহ করা হয় তবে ডাউনলোড করা ফাইলের জন্য এটি এই নামটি নেবে।
<a href="download/Curriculum_it.pdf.zip">Download curriculum</a>বা এটি: <a href="download/Curriculum_it.pdf.zip" download="Curriculum_it">Download curriculum</a>এবং এটি কীভাবে কাজ করে তার মধ্যে আমি কোনও পার্থক্য দেখতে পাচ্ছি না। উভয়ই আমার .zip ডাউনলোড করছে। এবং দ্বিতীয়টিতে ফাইলনাম বিকল্পটি ব্যবহার করে কিছুই করার মতো মনে হয় না।
আচরণটি বিভিন্ন এমআইএম টাইপগুলি পরিচালনা করতে ব্রাউজার কীভাবে সেট আপ হয় তার উপর নির্ভর করে। এই ক্ষেত্রে মাইম টাইপটি হ'ল অ্যাপ্লিকেশন / পিডিএফ। আপনি যদি ব্রাউজারটি ফাইলটি ডাউনলোড করতে বাধ্য করতে চান তবে আপনি পিডিএফ ফাইলগুলিতে একটি ভিন্ন মাইম টাইপ জোর করে চেষ্টা করতে পারেন। আমি এর বিপরীতে সুপারিশ করছি কারণ এটি একটি পিডিএফ ফাইল খুললে কি হবে তা ব্যবহারকারীদের পছন্দ হওয়া উচিত।
আপনি ডাউনলোড . js ( https://github.com/rndme/download এবং http://danML.com/download.html ) ব্যবহার করতে পারেন । যদি ফাইলটি কোনও বাহ্যিক URL এ থাকে তবে আপনাকে অবশ্যই একটি অজাক্স অনুরোধ করতে হবে, তবে এটি যদি না হয় তবে আপনি ফাংশনটি ব্যবহার করতে পারেন:
download(Path, name, mime)
গিটহাবের আরও তথ্যের জন্য তাদের ডকুমেন্টেশন পড়ুন।
পরিশেষে আমি খুঁজে পেয়েছি ...... গতিশীল অ্যাঙ্কর ট্যাগ তৈরি করুন এবং এটিতে ক্লিক করুন
<script>
$('#myclick').click(function(){
$('body').append('<a id="link" href="mypdf.pdf"
download="Payment.pdf"> </a>');
$('#link')[0].click();
});
</script>
'পেমেন্ট.পিডিএফ' কেবলমাত্র কাস্টম নামের জন্য।