আমি কীভাবে ফাইলগুলি পিডিএফ ডাউনলোড করার পরিবর্তে ব্রাউজারে খুলতে বাধ্য করব?


209

ব্রাউজারে পিডিএফ ফাইলগুলি খুলতে বাধ্য করার কোনও উপায় কি যখন "ব্রাউজারে পিডিএফ প্রদর্শন" অপশনটি চেক করা হয়?

আমি এমবেড ট্যাগ এবং একটি আইফ্রেম ব্যবহার করার চেষ্টা করেছি, তবে কেবলমাত্র সেই বিকল্পটি চেক করা হলে এটি কাজ করে।

আমি কি করতে পারি?

উত্তর:


418

ব্রাউজারে ফাইলটি দেখতে হবে তা ব্রাউজারকে বোঝাতে, এইচটিটিপি প্রতিক্রিয়াতে এই শিরোনামগুলি অন্তর্ভুক্ত করা উচিত:

Content-Type: application/pdf
Content-Disposition: inline; filename="filename.pdf"

দেখার চেয়ে ফাইলটি ডাউনলোড করার জন্য:

Content-Type: application/pdf
Content-Disposition: attachment; filename="filename.pdf"

ফাইলনামের চারপাশে উদ্ধৃতি আবশ্যক যদি ফাইলনামে এমন বিশেষ অক্ষর থাকে filename[1].pdfযা অন্যথায় প্রতিক্রিয়াটি পরিচালনা করার জন্য ব্রাউজারের ক্ষমতা ভঙ্গ করতে পারে।

আপনি HTTP প্রতিক্রিয়া শিরোনাম কীভাবে সেট করবেন তা নির্ভর করে আপনার HTTP সার্ভারের উপর (বা, আপনি যদি সার্ভার-সাইড কোড থেকে পিডিএফ প্রতিক্রিয়া তৈরি করছেন: আপনার সার্ভার-সাইড প্রোগ্রামিং ভাষা) side


13
ডাউনলোড জোর করতে আমি বরং কন্টেন্ট-টাইপ: অ্যাপ্লিকেশন / অক্টেট-স্ট্রিম ব্যবহার করি।
পাপিক জি টোবাডা

25
@ পাপিকজি.ট্যাবোয়াড তবে তারপরে ব্যবহারকারীর সিস্টেমটি ফাইলের প্রকারটি জানেন না। উদাহরণস্বরূপ, কিছু ব্যবহারকারী পিডিএফ ফাইলগুলির জন্য "সর্বদা এই ধরণের ফাইলগুলি খুলতে" পছন্দ করেছেন ted সম্ভবত আপনি যদি ব্যবহারকারীর পছন্দকে ওভাররাইড করতে চান তবে অষ্টেট-স্ট্রিমটি হ'ল উপায়, তবে সঠিক ধরণ এবং প্রস্তাবিত ফাইলের নাম দেওয়া একটি ডাউনলোড সরবরাহ করার "সঠিক" উপায়।
কলিনম

2
হাই @ কলিনম আমি এখানে কিছুটা বিভ্রান্ত হয়ে পড়েছি ... পিডিএফ রেন্ডারিংয়ে আমাদের সমস্যা হচ্ছে, এটি কেবল একটি স্ক্র্যাম্বড টেক্সট দেয়। আমরা বিষয়বস্তুর ধরণটি কোথায় সেট করব: অ্যাপ্লিকেশন / পিডিএফ সামগ্রী-বিশৃঙ্খলা: ইনলাইন; "filename.pdf"? 'অবশ্যই, আমরা কৌণিক-জেএস কোড ব্যবহার করে এটি আপলোড করি। সুতরাং আমার প্রশ্নটি কি আপলোড করার আগে বিষয়বস্তুর ধরণটি সেট করা উচিত? এবং এছাড়াও, আমরা ব্যাকএন্ড দল থেকে কেবল একটি লিঙ্ক পাই, একটি url যা ফাইলের পথ দেয়, যা আমরা নতুন ট্যাবে খুলি: উইন্ডো.ওপেন (url, '_blank') ব্যবহার করে ফোকাস ();
কৈলাস

3
@ কৈলাস, আপনি কী করতে চাইছেন তা আমি বুঝতে পারছি না ... উত্তরটি হ'ল শিরোনামগুলিকে উল্লেখ করছে যা পিডিএফ ফাইলের জন্য এইচটিটিপি অনুরোধের প্রতিক্রিয়া জানাতে কোনও সার্ভারকে ক্লায়েন্টকে পাঠানো উচিত। এই ফাইলগুলি কোনও ফাইল আপলোডের উপর প্রভাব ফেলবে না, ক্লায়েন্টের দ্বারা প্রতিবার ডাউনলোড হওয়ার সাথে সাথে আপনার url এর পিছনে কোড থাকা দরকার।
কলিনম

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

19

আপনি যদি এইচটিএমএল 5 ব্যবহার করেন (এবং আমার ধারণা আজকাল প্রত্যেকে এটি ব্যবহার করে), সেখানে একটি বৈশিষ্ট্য বলা হয় download

উদাহরণ স্বরূপ,

<a href="somepathto.pdf" download="filename">

এখানে filenamealচ্ছিক, তবে সরবরাহ করা থাকলে এটি ডাউনলোড করা ফাইলটির জন্য এই নামটি নেবে।


2
যদি আপনার সার্ভার কোডের নিয়ন্ত্রণ থাকে তবে আপনার 'সংযুক্তি' ব্যবহার করা উচিত কারণ এটি একই ফাইলনাম উত্সাহ কোডটি ব্যবহার করতে দেয়। আপনার যদি সার্ভারের উপর কোনও নিয়ন্ত্রণ না থাকে তবে এটি একটি ভাল সমাধান।
ক্রিস্টোফ রাউসি

এটি সমস্যার একটি উজ্জ্বল সমাধান তবে বরাবরের মতো, আইই এটি ব্যবহার থেকে আমাদের পিছনে রেখেছে: caniuse.com/#search=download
ররি ম্যাকক্রসন

1
গুরুত্বপূর্ণ এটি লক্ষণীয় যে এটি ডোমেনগুলি জুড়ে কাজ করে না (উদাঃ, একই-উত্স নীতিটি পথে আসে)। যদি একটি ডোমেন থেকে ডাউনলোড করা হয় তবে ডাউনলোডের বৈশিষ্ট্যটি কোনও ভিন্ন ডোমেনে সংরক্ষণ করা থাকলে কাজ করবে না। CORS সেই বিষয়বস্তুটি দিয়ে যাওয়ার অনুমতি দিতে পারে (পরীক্ষিত হয়নি) have
vol7ron 23

59
এটি আক্ষরিক অর্থেই ওপি যা জিজ্ঞাসা করছে তার বিপরীত :)
চক লে বাট

1
হ্যাঁ ফিগার! : The আমি প্রশ্নটি ভুল বুঝতে পেরেছিলাম এবং উত্তর দিয়েছি। তবে অনেক লোক কেবল এখানে বিপরীতে সন্ধান করে, এজন্যই উত্তরটি সম্পাদিত / সরানো হয়নি।
অক্ষয়

16

সঠিক প্রকারটি application/pdfপিডিএফ-এর জন্য, নয় application/force-download। এটি কিছু লিগ্যাসি ব্রাউজারগুলির জন্য হ্যাকের মতো দেখাচ্ছে। আপনি যদি পারেন তবে সর্বদা সঠিক মাইমটাইপ ব্যবহার করুন।

আপনার যদি সার্ভার কোডের উপর নিয়ন্ত্রণ থাকে:

  • জোর করে ডাউনলোড / প্রম্পট: ব্যবহার করুন header("Content-Disposition", "attachment; filename=myfilename.myextension");
  • ব্রাউজার এটি খোলার চেষ্টা করে: ব্যবহার করুন header("Content-Disposition", "inline; filename=myfilename.myextension");

সার্ভার কোডের উপর কোনও নিয়ন্ত্রণ নেই:

দ্রষ্টব্য: আমি সার্ভার সাইডে ফাইলের নামটি সেট করতে পছন্দ করি কারণ আপনার আরও তথ্য থাকতে পারে এবং সাধারণ কোড ব্যবহার করতে পারেন।


2

আপনার যদি অ্যাপাচি থাকে তবে এটি .htaccessফাইলটিতে যুক্ত করুন:

<FilesMatch "\.(?i:pdf)$">
    ForceType application/octet-stream
    Header set Content-Disposition attachment
</FilesMatch>

কীভাবে আমরা একাধিক এক্সটেনশন যুক্ত করতে পারি? আমি ডিওসি এবং এক্সএলএস এক্সটেনশানটিও যুক্ত করতে চাই। দয়া করে আমাকে পরামর্শ দিন। আগাম ধন্যবাদ.
কমলেশ 30'19

এটি যা চাওয়া হয়েছে তার বিপরীতে কাজ করে
কোয়ান্টিন

1

ওহো, আমার আগের পোস্টে টাইপ করার ত্রুটি ছিল।

    header("Content-Type: application/force-download");
    header("Content-type: application/pdf");
    header("Content-Disposition: inline; filename=\"".$name."\";");

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


4
আগের পোস্টটি কি?
পিটার মর্টেনসেন

0

এটি এএসপি.এনইটি এমভিসির জন্য

আপনার সিএসটিএমএল পৃষ্ঠায়:

<section>
    <h4><a href="@Url.Action("Download", "Document", new { id = @Model.GUID })"><i class="fa fa-download"></i> @Model.Name</a></h4>
    <object data="@Url.Action("View", "Document", new { id = @Model.GUID })" type="application/pdf" width="100%" height="800" class="col-md-12">
        <h2>Your browser does not support viewing PDFs, click on the link above to download the document.</h2>
    </object>
</section>

আপনার নিয়ামক মধ্যে:

public ActionResult Download(Guid id)
    {
        if (id == Guid.Empty)
            return null;

        var model = GetModel(id);

        return File(model.FilePath, "application/pdf", model.FileName);
    }

public FileStreamResult View(Guid id)
    {
        if (id == Guid.Empty)
            return null;

        var model = GetModel(id);

        FileStream fs = new FileStream(model.FilePath, FileMode.Open, FileAccess.Read);

        return File(fs, "application/pdf");
    }

-1

নিম্নলিখিত ফায়ারফক্সে ভাল কাজ করার সময় এটি ক্রোম এবং মোবাইল ব্রাউজারগুলিতে কাজ করে না।

Content-Type: application/pdf
Content-Disposition: inline; filename="filename.pdf"

ক্রোম এবং মোবাইল ব্রাউজারগুলির ত্রুটিটি ঠিক করতে, নিম্নলিখিতগুলি করুন:

  • আপনার প্রকল্পের একটি ডিরেক্টরিতে আপনার ফাইলগুলি সঞ্চয় করুন
  • গুগল পিডিএফ ভিউয়ার ব্যবহার করুন

গুগল পিডিএফ ভিউয়ারটিকে তাই ব্যবহার করা যেতে পারে:

<iframe src="http://docs.google.com/gview?url=http://example.com/path/to/my/directory/pdffile.pdf&embedded=true" frameborder="0"></iframe>

-4

রুট ফাইল থেকে ডাউনলোডস.এফপি খুলুন।

তারপরে 186 লাইনে যান এবং এটি নিম্নলিখিতটিতে পরিবর্তন করুন:

        if(preg_match("/\.jpg|\.gif|\.png|\.jpeg/i", $name)){
            $mime = getimagesize($download_location);
            if(!empty($mime)) {
                header("Content-Type: {$mime['mime']}");
            }
        }
        elseif(preg_match("/\.pdf/i", $name)){
            header("Content-Type: application/force-download");
            header("Content-type: application/pdf");
            header("Content-Disposition: inline; filename=\"".$name."\";");
        }

        else{
            header("Content-Type: application/force-download");
            header("Content-type: application/octet-stream");
            header("Content-Disposition: attachment; filename=\"".$name."\";");
        }

7
তারা পিএইচপি ব্যবহার করে তা উল্লেখ নেই। যদি তাদের ব্যাকএন্ডটি পাইথন বা। নেট এ থাকে?
ম্যাক্সিমাম রুইলার

1
... বাম মাঠের বাইরে কথা বলুন। এমনকি তিনি কোন কাঠামোর কথা বলছেন তাও জানায় না।
আর্চোনিক

-4

আপনি নিম্নলিখিত পদ্ধতিতে এটি করতে পারেন:

<a href="path to PDF file">Open PDF</a>

যদি পিডিএফ ফাইলটি কোনও ফোল্ডারের ভিতরে থাকে এবং সেই ফোল্ডারে সেই ফোল্ডারে সরাসরি ফাইল অ্যাক্সেসের অনুমতি না থাকে তবে আপনাকে .htaccessএইভাবে ফাইল সেটিং ব্যবহার করে কিছু ফাইল অ্যাক্সেস বিধিনিষেধকে বাইপাস করতে হবে :

<FilesMatch ".*\.(jpe?g|JPE?G|gif|GIF|png|PNG|swf|SWF|pdf|PDF)$" >
    Order Allow,Deny
    Allow from all
</FilesMatch>

তবে এখন কিছু নির্দিষ্ট ফাইলের অনুমতি দিন ।

আমি এই কোডটি ব্যবহার করেছি এবং এটি পুরোপুরি কার্যকর হয়েছে।


তারা অ্যাপাচি ব্যবহার করে তা উল্লেখ নেই। তারা আইআইএস ব্যবহার করলে কী হবে? নাকি এক্সপ্রেস?
ম্যাক্সিমাম রুইলার


-7

পিএইচপি-তে ব্রাউজারে একটি ফাইল দেখতে বাধ্য করার আরও একটি পদ্ধতি এখানে রয়েছে:

$extension = pathinfo($file_name, PATHINFO_EXTENSION);
$url = 'uploads/'.$file_name;
        echo '<html>'
                .header('Content-Type: application/'.$extension).'<br>'
                .header('Content-Disposition: inline; filename="'.$file_name.'"').'<br>'
                .'<body>'
                .'<object   style="overflow: hidden; height: 100%;
             width: 100%; position: absolute;" height="100%" width="100%" data="'.$url.'" type="application/'.$extension.'">
                    <embed src="'.$url.'" type="application/'.$extension.'" />
             </object>'
            .'</body>'
            . '</html>';

1
headerআপনি অনুরোধের বডি আউটপুট করা শুরু করার পরে কাজ করে না (এবং এটি কোনও HTML ডকুমেন্টে
কুইন্টিন

-9

কেবলমাত্র অ্যাডোব রিডার খুলুন, মেনু → সম্পাদনাপছন্দসমূহইন্টারনেট , তারপরে ব্রাউজার মোডে পরিবর্তন করুন বা বিভিন্ন ব্রাউজারে বিস্তারিত নির্দেশাবলীর জন্য ব্রাউজারে পিডিএফ প্রদর্শন করুন | অ্যাক্রোব্যাট, অ্যাক্রোব্যাট রিডার


3
আপনি যদি অ্যাডোব্রিডার ব্যবহার না করেন বা উইন্ডো ব্যবহার না করেন তবে কী হবে? আপনি উত্তর কার্যকর হবে না। তদুপরি, এটির ব্যবহারকারীর সেটিং পরিবর্তন করতে বলার দরকার পড়ে, যা আপনি বাস্তব বিশ্বে করতে পারবেন না।
Clawfire

-12

আপনি যদি একটি .PDF এ লিঙ্ক করেন তবে এটি ব্রাউজারে খুলবে।
বাক্সটি যদি চেক না করা থাকে তবে ডাউনলোডটি জোর করার জন্য একটি .zip এর সাথে লিঙ্ক করা উচিত।

যদি .zip কোনও বিকল্প না হয়, তবে ডাউনলোডটি জোর করে পিএইচপিতে শিরোনাম ব্যবহার করুন

header('Content-Type: application/force-download'); 
header('Content-Description: File Transfer'); 

হ্যাঁ, তবে ডাউনলোড না করার জন্য আমার জোর করে বলার উপায় দরকার। এটি সম্ভব হলে আমার কোনও ধারণা নেই।
ইলোআলিসবোয়া

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

1
আসলে, আমার উত্তর দেখুন।
গ্যাব্রিয়েল রায়ান নাহমিয়াস

21
এটা ভুল. কোনও প্রয়োগ / জোর-ডাউনলোড নেই। আপনি alskjdsdjk / aljksdlasdj পাশাপাশি ব্যবহার করতে পারেন। ব্রাউজারটি ডাউনলোড করবে কারণ এটি এই মাইম-টাইপটি জানে না। ডাউনলোডের জন্য ডান মাইম-টাইপটি আমাকে আবেদন করবে / অক্টেট-স্ট্রিম
পাপিক জি টবোয়াদ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.