ในเว็บแอปพลิเคชันของฉัน (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เท่ากับtrueFLV
หรือ
อ่านเนื้อหาของไฟล์
var contentArray = target.GetBuffer();
var content = Encoding.ASCII.GetString(contentArray);
ตัวอักษรสอง / สามตัวแรกจะบอกประเภทไฟล์
ในกรณีที่ FLV เป็น "FLV ...... "
content.StartsWith("FLV")
ที่เซิร์ฟเวอร์คุณสามารถตรวจสอบประเภท MIME ค้นหาประเภท mime flv ที่นี่หรือใน Google
คุณควรตรวจสอบว่าเป็นประเภทละครใบ้
video/x-flv
หากคุณใช้ FileUpload ใน C # เช่นคุณสามารถทำได้
FileUpload.PostedFile.ContentType == "video/x-flv"
ฉันไม่แน่ใจว่านี่คือสิ่งที่คุณต้องการ แต่:
Directory.GetFiles(@"c:\mydir", "*.flv");
หรือ:
Path.GetExtension(@"c:\test.flv")
นอกจากนี้หากคุณมีFileInfo fiคุณสามารถทำได้ง่ายๆ:
string ext = fi.Extension;
และมันจะเก็บนามสกุลของไฟล์ไว้ (หมายเหตุ: มันจะรวมไว้.ด้วยดังนั้นผลลัพธ์ของข้างต้นอาจเป็น: .jpg .txtและอื่น ๆ ...
คุณจะไม่สามารถ จำกัด ประเภทไฟล์ที่ผู้ใช้อัปโหลดที่ฝั่งไคลเอ็นต์ [*] คุณจะทำได้ที่ฝั่งเซิร์ฟเวอร์เท่านั้น หากผู้ใช้อัปโหลดไฟล์ที่ไม่ถูกต้องคุณจะสามารถรับรู้ได้เมื่ออัปโหลดไฟล์แล้วเท่านั้น ไม่มีวิธีที่เชื่อถือได้และปลอดภัยในการหยุดผู้ใช้อัปโหลดรูปแบบไฟล์ที่ต้องการ
[*] ใช่คุณสามารถทำสิ่งที่ชาญฉลาดได้ทุกประเภทเพื่อตรวจหานามสกุลไฟล์ก่อนที่จะเริ่มการอัปโหลด แต่อย่าพึ่งใช้มัน จะมีคนเข้ามาแก้ไขและอัปโหลดสิ่งที่พวกเขาชอบไม่ช้าก็เร็ว
คุณสามารถตรวจสอบลายเซ็น. 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);
วิธีการข้างต้นใช้ได้ดีกับ firefox และ IE ฉันสามารถดูไฟล์ทุกประเภทเช่น zip, 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
โซลูชันนี้ยังช่วยในกรณีที่มีส่วนขยายมากกว่าหนึ่งรายการเช่น "Avishay.student.DB"
FileInfo FileInf = new FileInfo(filePath);
string strExtention = FileInf.Name.Replace(System.IO.Path.GetFileNameWithoutExtension(FileInf.Name), "");