Trong ứng dụng web của tôi (asp.net, c #) Tôi đang tải lên tệp video trong một trang nhưng tôi chỉ muốn tải lên video flv. Làm cách nào để hạn chế khi tôi tải lên các video mở rộng khác?
Trong ứng dụng web của tôi (asp.net, c #) Tôi đang tải lên tệp video trong một trang nhưng tôi chỉ muốn tải lên video flv. Làm cách nào để hạn chế khi tôi tải lên các video mở rộng khác?
Câu trả lời:
string myFilePath = @"C:\MyFile.txt";
string ext = Path.GetExtension(myFilePath);
// ext would be ".txt"
Bạn có thể chỉ cần đọc luồng của một tập tin
using (var target = new MemoryStream())
{
postedFile.InputStream.CopyTo(target);
var array = target.ToArray();
}
5/6 chỉ mục đầu tiên sẽ cho bạn biết loại tệp. Trong trường hợp FLV 70, 76, 86, 1, 5 .
private static readonly byte[] FLV = { 70, 76, 86, 1, 5};
bool isAllowed = array.Take(5).SequenceEqual(FLV);
nếu isAllowed
bằng true
thì FLV của nó.
HOẶC LÀ
Đọc nội dung của tập tin
var contentArray = target.GetBuffer();
var content = Encoding.ASCII.GetString(contentArray);
Hai hoặc ba chữ cái đầu tiên sẽ cho bạn biết loại tệp.
Trong trường hợp FLV, "FLV ......"
content.StartsWith("FLV")
Tại máy chủ, bạn có thể kiểm tra loại MIME, tra cứu loại mime flv tại đây hoặc trên google.
Bạn nên kiểm tra xem loại mime là
video/x-flv
Nếu bạn đang sử dụng FileUpload trong C # chẳng hạn, bạn có thể làm
FileUpload.PostedFile.ContentType == "video/x-flv"
Bạn sẽ không thể hạn chế loại tệp mà người dùng tải lên ở phía máy khách [*]. Bạn sẽ chỉ có thể làm điều này ở phía máy chủ. Nếu người dùng tải lên một tệp không chính xác, bạn sẽ chỉ có thể nhận ra rằng một khi tệp được tải lên được tải lên. Không có cách nào đáng tin cậy và an toàn để ngăn người dùng tải lên bất kỳ định dạng tệp nào họ muốn.
[*] có, bạn có thể thực hiện tất cả các loại công cụ thông minh để phát hiện phần mở rộng tệp trước khi bắt đầu tải lên, nhưng đừng dựa vào nó. Ai đó sẽ nhận được xung quanh nó và tải lên bất cứ điều gì họ thích sớm hay muộn.
Bạn có thể kiểm tra chữ ký .flv. Bạn có thể tải đặc điểm kỹ thuật tại đây:
http://www.adobe.com/devnet/flv/
Xem chương "Tiêu đề FLV".
Tìm thấy một giải pháp thay thế tại DotNetPerls mà tôi thích hơn vì nó không yêu cầu bạn chỉ định đường dẫn. Đây là một ví dụ nơi tôi đã tạo ra một mảng với sự trợ giúp của một phương thức tùy chỉnh
// 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);
Phương pháp trên hoạt động tốt với firefox và IE, tôi có thể xem tất cả các loại tệp như zip, txt, xls, xlsx, doc, docx, jpg, png
nhưng khi tôi cố gắng tìm phần mở rộng của tập tin từ googlechrom, tôi đã thất bại.
Điều đáng nói là làm thế nào để loại bỏ phần mở rộng song song với việc có phần mở rộng:
var name = Path.GetFileNameWithoutExtension(fileFullName); // Get the name only
var extension = Path.GetExtension(fileFullName); // Get the extension only