अपने वेब एप्लिकेशन (asp.net, c #) में मैं एक पेज में वीडियो फ़ाइल अपलोड कर रहा हूं लेकिन मैं केवल flv वीडियो अपलोड करना चाहता हूं। जब मैं अन्य एक्सटेंशन वीडियो अपलोड करता हूं तो मैं कैसे प्रतिबंधित कर सकता हूं?
अपने वेब एप्लिकेशन (asp.net, c #) में मैं एक पेज में वीडियो फ़ाइल अपलोड कर रहा हूं लेकिन मैं केवल flv वीडियो अपलोड करना चाहता हूं। जब मैं अन्य एक्सटेंशन वीडियो अपलोड करता हूं तो मैं कैसे प्रतिबंधित कर सकता हूं?
जवाबों:
string myFilePath = @"C:\MyFile.txt";
string ext = Path.GetExtension(myFilePath);
// ext would be ".txt"
आप बस किसी फ़ाइल की स्ट्रीम पढ़ सकते हैं
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")
सर्वर पर आप MIME प्रकार की जाँच कर सकते हैं, यहाँ या Google पर flv माइम प्रकार देख सकते हैं।
आपको यह देखना चाहिए कि माइम का प्रकार क्या है
video/x-flv
यदि आप उदाहरण के लिए C # में FileUpload का उपयोग कर रहे हैं, तो आप कर सकते हैं
FileUpload.PostedFile.ContentType == "video/x-flv"
आप उस फ़ाइल प्रकार को प्रतिबंधित नहीं कर पाएंगे जो उपयोगकर्ता क्लाइंट साइड पर अपलोड करता है [*]। आप केवल सर्वर साइड पर ही ऐसा कर पाएंगे। यदि कोई उपयोगकर्ता गलत फ़ाइल अपलोड करता है, तो आप केवल फ़ाइल अपलोड किए जाने के बाद ही पहचान पाएंगे। उपयोगकर्ता को जो भी फ़ाइल स्वरूप चाहिए उसे अपलोड करने से रोकने का कोई विश्वसनीय और सुरक्षित तरीका नहीं है।
[*] हां, आप अपलोड शुरू करने से पहले फ़ाइल एक्सटेंशन का पता लगाने के लिए सभी प्रकार के चतुर सामान कर सकते हैं, लेकिन इस पर भरोसा न करें। कोई व्यक्ति इसके चारों ओर मिल जाएगा और जो भी उन्हें जल्द या बाद में अपलोड करना होगा।
आप .flv हस्ताक्षर देख सकते हैं। आप यहाँ विनिर्देश डाउनलोड कर सकते हैं:
http://www.adobe.com/devnet/flv/
"FLV हैडर" अध्याय देखें।
DotNetPerls पर एक वैकल्पिक समाधान मिला, जो मुझे बेहतर लगा क्योंकि इसमें आपको एक पथ निर्दिष्ट करने की आवश्यकता नहीं है। यहाँ एक उदाहरण है जहाँ मैंने एक कस्टम विधि की मदद से एक सरणी को आबाद किया
// 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);
}
string FileExtn = System.IO.Path.GetExtension(fpdDocument.PostedFile.FileName);
उपरोक्त विधि फ़ायरफ़ॉक्स और IE के साथ ठीक काम करती है, मैं ज़िप, txt, xls, xlsx, doc, docx, jpg, png जैसी सभी प्रकार की फ़ाइलों को देखने में सक्षम हूँ
लेकिन जब मैं googlechrome से फ़ाइल का विस्तार खोजने की कोशिश करता हूं, तो मैं असफल रहा।
यह विस्तार के साथ समानांतर में भी विस्तार को हटाने का उल्लेख करने के लायक है:
var name = Path.GetFileNameWithoutExtension(fileFullName); // Get the name only
var extension = Path.GetExtension(fileFullName); // Get the extension only