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


18

আমার কাছে রেলস অ্যাপ্লিকেশন (রেডমাইন) রয়েছে যা এনগিনেক্সের সাথে কাজ করে। আমি যদি কোনও সংযুক্তিতে ক্লিক করছি তবে আমার ব্রাউজার (ফায়ারফক্স, অর্থাৎ ক্রোম) আমাকে ফাইল ডাউনলোড করতে বলুন। তবে আমি যদি টেক্সট-টাইপ সংযুক্তিতে ক্লিক করছি তবে আমার ব্রাউজারটি ব্রাউজারে এই ফাইলটি খুলুন।

যেহেতু আমি বুঝতে পেরেছি এটি সিদ্ধান্ত নেওয়া Nginx এর কাজ - ব্রাউজারে ফাইল খুলুন বা এটি ডাউনলোড করা। আমি কীভাবে এটি সেটআপ করতে পারি?

উত্তর:


10

Txt এক্সটেনশনের জন্য ডিফল্ট প্রকারটি পাঠ্য / প্লেইন। এই আচরণটি মাইম.টাইপস ফাইলে বর্ণিত। এটিকে ওভাররাইড করার জন্য http://nginx.org/en/docs/http/ngx_http_core_module.html#default_type বা http://nginx.org/en/docs/http/ngx_http_core_module.html#typs ব্যবহার করুন (সম্ভবত অ্যাপ্লিকেশন / অক্টেটে সেট করুন -stream)।


20

পরিবর্তন Content-Typeএর .txtফাইল কাজ করতে পারে, কিন্তু এটা, এই সমস্যা সমাধানের জন্য একটি কিছুটা ঝুঁকিপূর্ণ উপায় কারণ আপনার 100% ব্যবহারকারীর ব্রাউজার সাড়া দিতে হবে আপনি কিভাবে আশা নিশ্চয়তা দিতে পারে না। এবং তদতিরিক্ত, এটি .txtএকটি বাইনারি ফাইল হিসাবে একটি ফাইল লেবেল বিভ্রান্তিকর হয় ।

পরিবর্তে, আমি ফাইলটি প্রদর্শনের পরিবর্তে ব্রাউজারকে ডাউনলোড করার জন্য বাধ্য করার স্ট্যান্ডার্ড উপায়টি ব্যবহার করার পরামর্শ দিচ্ছি, এটি হ'ল Content-Dispositionমানটি attachment( আরএফসি 2183 , আরএফসি 2616 দেখুন ) সহ ব্যবহার করুন।

উদাহরণস্বরূপ, এই এনজিন্স locationব্লকটি ইউআরআই এর .txtঅধীনে ফাইলগুলির সাথে এই জাতীয় শিরোনামটি প্রেরণ করবে /downloads/এবং এইভাবে তারা ডাউনলোড করতে বাধ্য হবে:

location ~ ^/downloads/.*\.txt$ {
  add_header Content-Disposition "attachment";
}

সুতরাং আপনি আপনার কনফিগারেশনের জন্য উপযুক্ত অন্যান্য যথাযথ মেলানো ইত্যাদি যুক্ত করতে পারেন।


3
এটি সেরা সমাধান বলে মনে হচ্ছে।
ভাদিম

তবে Content-Dispositionক্রোমিয়াম ব্রাউজারে হ্যাক কনসোলে খারাপ শব্দ বলা শুরু করতে পারে এবং পৃষ্ঠা থেকে কোনও ফাইল ডাউনলোড করা বন্ধ করে দিতে পারে। এটি থিংহেগস বলে (হলুদ ত্রিভুজ সহ) যেমন:"Resource interpreted as Document but transferred with MIME type image/png:"
নাকিলন

4

ডাউনলোডযোগ্য ফাইলের জন্য আপনাকে অবস্থানটি বের করতে হবে এবং তাদের সামগ্রী-ধরণের সেট করতে হবে application/octet-stream

ডাউনলোডযোগ্য প্রমোটেরিয়ালগুলির জন্য আমাদের পরিষেবাতে আমাদের নিম্নলিখিত অবস্থান রয়েছে (যার মধ্যে পিডিএফ, চিত্র এবং কিছু ডক্স রয়েছে তবে আমি নিশ্চিত যে এটি টেক্সট ফাইলগুলির সাথেও কাজ করবে):

location /promomaterial/download/ {
         add_header Content-Type application/octet-stream;
}

প্রতিটি ব্রাউজার আমরা এই ফাইলটি প্রদর্শন করার পরিবর্তে এই ফাইল থেকে ডাউনলোড করার চেষ্টা করেছি।


4
"অ্যাড_হেডার" ব্যবহার করা এটি একেবারেই ভুল, পরিবর্তে "ডিফল্ট_প্রকার" ব্যবহার করুন: অবস্থান / এসএমএটি / {ডিফল্ট_প্রকার অ্যাপ্লিকেশন / অকটেট-স্ট্রিম; }
ওলেগ নিউমিওয়াকিন

@ ওলেগনিউমায়ওয়াকিন ডিফল্ট_টাইপ অ্যাড_হেডারের চেয়ে ভাল কেন?
ব্যবহারকারী 193661

2
@ user193661 কারণ "অ্যাড_হেডার" এটি লিটারলিভাবে নতুন শিরোনাম "সামগ্রী-প্রকার" যুক্ত করেছে, সুতরাং প্রতিক্রিয়া হিসাবে আপনি দুটি "কন্টেন্ট-টাইপ" শিরোনাম পেতে পারেন যা এইচটিটিপি ক্লায়েন্টদের অদ্ভুত আচরণের কারণ হতে পারে। প্রতিক্রিয়া হিসাবে "ডিফল্ট_প্রকার" একক "সামগ্রী-প্রকার" শিরোনাম সেট করা (ওভাররাইট) করা হয়।
ওলেগ নিউমিওয়াকিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.