সি # তে কোনও ফাইলের এক্সটেনশন কীভাবে খুঁজে পাবেন?


135

আমার ওয়েব অ্যাপ্লিকেশনটিতে (asp.net, c #) আমি একটি পৃষ্ঠায় ভিডিও ফাইল আপলোড করছি তবে আমি কেবল ফ্লভি ভিডিও আপলোড করতে চাই। আমি যখন অন্যান্য এক্সটেনশান ভিডিওগুলি আপলোড করি তখন কীভাবে সীমাবদ্ধ রাখতে পারি?


1
যদি সম্ভব হয় তবে অপ্রয়োজনীয় আপলোডগুলি এড়াতে আপনি ক্লায়েন্টকেও পরীক্ষা করতে চান।
থিলো

2
হ্যাঁ, তবে নীচে আমার উত্তরটি দেখুন - ক্লায়েন্টের পক্ষের চেকিংয়ের উপর নির্ভর করবেন না - এটি শীঘ্রই বা পরে সংশোধিত হবে। :)
জম্বিশিপ

4
ক্লায়েন্ট-পার্শ্ব চেক আপনার সার্ভারের জন্য সুরক্ষা নয়, তবে ব্যবহারকারীর জন্য একটি সুবিধা।
থিলো

মঞ্জুর করেন। আমি কেবল ওপিকে এটির উপর নির্ভর না করার পরামর্শ দিচ্ছি।
জম্বিশিপ

উত্তর:


269

Path.GetExtension

string myFilePath = @"C:\MyFile.txt";
string ext = Path.GetExtension(myFilePath);
// ext would be ".txt"

8
এটি কাউকে কেবল কোনও ফাইল * .flv নাম পরিবর্তন করতে এবং এটি আপলোড করতে দেয়। আপনার প্রয়োজনীয়তাগুলি কিসের উপর নির্ভর করে আপনি মাইম টাইপটিও পরীক্ষা করতে চাইতে পারেন।
ডেভিড গ্লেন

মাইম টাইপটি সাধারণত ফাইলের নাম এক্সটেনশন অনুযায়ী সেট হয় না?
থিলো

@ থিলো, আপনি ঠিক বলেছেন, তবে মাইম সামগ্রীর ধরণ পরিবর্তন না করে এক্সটেনশনটি পরিবর্তন করা যেতে পারে। মাইম টাইপটি ফাইলটিতে থাকা ডেটা বর্ণনা করে, তাই এটি যথাযথভাবে পরিচালনা করা যায় en.wikedia.org/wiki/MIME
মার্ক ডিকিনসন

2
না, আরও ভাল উপায় ফাইলের সামগ্রী চেক করা। এটি flv স্বাক্ষর পরীক্ষা করা প্রয়োজন।
মারাত ফাসখিয়েভ

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

21

আপনি কেবল কোনও ফাইলের স্ট্রিমটি পড়তে পারেন

using (var target = new MemoryStream())
{
    postedFile.InputStream.CopyTo(target);
    var array = target.ToArray();
}

প্রথম 5/6 সূচকগুলি আপনাকে ফাইলের প্রকারটি বলবে। FLV এর ক্ষেত্রে এটি 70, 76, 86, 1, 5

private static readonly byte[] FLV = { 70, 76, 86, 1, 5};

bool isAllowed = array.Take(5).SequenceEqual(FLV);

যদি এর isAllowedসমান হয় trueতবে এর এফএলভি।

অথবা

একটি ফাইলের বিষয়বস্তু পড়ুন

var contentArray = target.GetBuffer();
var content = Encoding.ASCII.GetString(contentArray);

প্রথম দুই / তিনটি অক্ষর আপনাকে ফাইলের প্রকারটি বলবে।
FLV এর ক্ষেত্রে এর "FLV ......"

content.StartsWith("FLV")

3
এটি উচ্চতর রেটিং করা উচিত। আপনি যদি আপনার অ্যাপ্লিকেশনটি সত্যই কাজ করতে চান এবং ডেটা অবিশ্বস্ত হয় তবে আপনার শুরুটি পরীক্ষা করা উচিত।
PRMan

7

সার্ভারে আপনি মাইম টাইপ, এখানে ফ্ল্যাশ মাইম টাইপ বা গুগলে দেখতে পারেন।

আপনার মাইম টাইপটি পরীক্ষা করা উচিত

video/x-flv

আপনি উদাহরণস্বরূপ যদি সি # তে একটি ফাইলআপলোড ব্যবহার করেন তবে আপনি এটি করতে পারেন

FileUpload.PostedFile.ContentType == "video/x-flv"

5

আপনি যা চান তা এটি নিশ্চিত কিনা তবে আমি নিশ্চিত নই:

Directory.GetFiles(@"c:\mydir", "*.flv");

বা:

Path.GetExtension(@"c:\test.flv")

4

এছাড়াও, আপনার যদি একটি থাকে তবে আপনি FileInfo fiকেবল তা করতে পারেন:

string ext = fi.Extension;

এবং এটি ফাইলের প্রসারকে ধরে রাখবে (দ্রষ্টব্য: এতে এতে অন্তর্ভুক্ত থাকবে ., সুতরাং উপরের ফলাফলটি হতে পারে: .jpg .txtএবং আরও কিছু ....


2

ব্যবহারকারীরা যে ফাইল ফাইলটি ক্লায়েন্ট পক্ষের আপলোড করে সেটিকে সীমাবদ্ধ রাখতে সক্ষম হবেন না [*]। আপনি কেবল সার্ভারের পাশেই এটি করতে সক্ষম হবেন। যদি কোনও ব্যবহারকারী কোনও ভুল ফাইল আপলোড করে তবে আপনি কেবল ফাইলটি আপলোড হওয়ার পরে তা বুঝতে সক্ষম হবেন। কোনও ব্যবহারকারী তাদের ফাইল ফাইল ফরম্যাট আপলোড করা বন্ধ করার কোনও নির্ভরযোগ্য এবং নিরাপদ উপায় নেই।

[*] হ্যাঁ, আপনি আপলোড শুরু করার আগে ফাইল এক্সটেনশন সনাক্ত করতে সমস্ত ধরণের চালাক স্টাফ করতে পারেন, তবে তার উপর নির্ভর করবেন না। কেউ এটিকে ঘিরে ফেলবে এবং তাড়াতাড়ি বা পরে যা কিছু পছন্দ করবে তা আপলোড করবে।


1
যদিও তিনি হ্যাকারকে যা চান তা আপলোড করা থেকে আটকাতে পারে না, তবে তার ব্যবহারকারীর সুবিধার্থে ক্লায়েন্টের পক্ষ থেকে তার চেক করা উচিত। ফ্ল্যাশ আপলোডকারীদের ফাইলের প্রকারটি পরীক্ষা করতে সক্ষম হওয়া উচিত।
থিলো

1
ওপিতে ফ্ল্যাশ আপলোডারদের উল্লেখ করা হয়নি (এটি 'ফ্ল্যাশ সামগ্রীর আপলোডারদের চেয়ে' ফ্ল্যাশে লিখিত আপলোডার ')। প্রশ্নটি এএসপ নেট এবং সি # ট্যাগের সাথে ট্যাগ করা হয় এবং সেই প্রযুক্তিগত পছন্দগুলির সাথে ক্লায়েন্ট-সাইড চেকিং সীমাবদ্ধ এবং সহজেই পরাজিত হয়। :)
জম্বিশিপ

একটি ভিডিও আপলোড সাইটের জন্য, ক্লায়েন্টের পাশে তার পরে আরও একটি HTML আপলোড ফর্মের আরও ভাল কিছু হওয়া উচিত। অগ্রগতি বার ছাড়া মাল্টি-এমবি আপলোডগুলি মজাদার নয়।
থিলো

ঠিক আছে আপনি বলছেন যে ক্লায়েন্টের পাশের চেকটি এতটা ভাল নয় যে আমি সার্ভার সাইডে কিভাবে চেক করতে পারি মিস্টার জম্বোসীপ
সূর্য শসিধর

@ থিলো - আমি আরও একমত হতে পারছি না, তবে প্রশ্নটি একটি এএসপি নেটওয়ার আপলোড ফর্ম সম্পর্কে। তিনি ওপেনের উপর নির্ভর করে যে তিনি যথেষ্ট যথেষ্ট কিনা তা ভেবে দেখেন।
জ্যাম্বিশিপ


2

দিয়ে শেষ হয়()

ডটনেটপার্টসগুলিতে একটি বিকল্প সমাধান খুঁজে পেয়েছি যা আমি ভাল পছন্দ করেছি কারণ এটির জন্য আপনাকে কোনও পথ নির্দিষ্ট করার দরকার নেই। এখানে একটি উদাহরণ যেখানে আমি একটি কাস্টম পদ্ধতির সাহায্যে একটি অ্যারে তৈরি করেছি

        // This custom method takes a path 
        // and adds all files and folder names to the 'files' array
        string[] files = Utilities.FileList("C:\", "");
        // Then for each array item...
        foreach (string f in files)
        {
            // Here is the important line I used to ommit .DLL files:
            if (!f.EndsWith(".dll", StringComparison.Ordinal))
                // then populated a listBox with the array contents
                myListBox.Items.Add(f);
        }

2
string FileExtn = System.IO.Path.GetExtension(fpdDocument.PostedFile.FileName);

উপরের পদ্ধতিটি ফায়ারফক্স এবং আইইয়ের সাথে দুর্দান্তভাবে কাজ করে, আমি জিপ, টিএসটিএসটি, এক্সএলএস, এক্সএলএসএক্স, ডক, ডক্স, জেপজি, পিএনজি সব ধরণের ফাইল দেখতে সক্ষম

তবে আমি যখন গুগল ক্রোম থেকে ফাইলের এক্সটেনশন সন্ধান করার চেষ্টা করেছি, আমি ব্যর্থ হয়েছি।


2

এক্সটেনশন পাওয়ার সাথে সমান্তরালে কীভাবে এক্সটেনশনটি সরিয়ে ফেলা যায় তা উল্লেখ করার মতো:

var name = Path.GetFileNameWithoutExtension(fileFullName); // Get the name only

var extension = Path.GetExtension(fileFullName); // Get the extension only

0

এই সমাধানটি "অব্যশয়.স্টুটেন্ট.ডিবি" এর মতো একাধিক এক্সটেনশনের ক্ষেত্রেও সহায়তা করে

                FileInfo FileInf = new FileInfo(filePath);
                string strExtention = FileInf.Name.Replace(System.IO.Path.GetFileNameWithoutExtension(FileInf.Name), "");
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.