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 các video flv. Tôi có thể hạn chế như thế nào khi tôi tải lên các video mở rộng khác?Cách tìm phần mở rộng của một tập tin?
Trả lời
string myFilePath = @"C:\MyFile.txt";
string ext = Path.GetExtension(myFilePath);
// ext would be ".txt"
Cảm ơn u Ông James nó đang làm việc tốt cảm ơn u cho phản ứng –
Điều này cho phép ai đó chỉ cần đổi tên bất kỳ tập tin * .flv và tải nó lên. Tùy thuộc vào yêu cầu của bạn là gì, bạn cũng có thể kiểm tra loại MIME. –
Không phải loại MIME thường được đặt theo phần mở rộng tên tệp không? – Thilo
Tại máy chủ bạn có thể kiểm tra kiểu MIME, tra cứu flv loại mime đây hoặc trên google.
Bạn nên kiểm tra xem các loại mime là
video/x-flv
Nếu bạn đang sử dụng một FileUpload trong C# ví dụ, bạn có thể làm
FileUpload.PostedFile.ContentType == "video/x-flv"
Tôi không chắc chắn nếu điều này là những gì bạn muốn nhưng:
Directory.GetFiles(@"c:\mydir", "*.flv");
Hoặc:
Path.GetExtension(@"c:\test.flv")
cảm ơn u Ông Carra đang làm việc –
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 tệp không chính xác, bạn sẽ chỉ có thể nhận ra rằng 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 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 không dựa vào nó. Một người nào đó 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.
Trong khi ông không thể ngăn chặn một hacker tải lên những gì ông muốn, ông vẫn nên kiểm tra ở phía khách hàng như một tiện lợi cho người dùng. Người tải lên Flash có thể kiểm tra loại tệp. – Thilo
OP không đề cập đến người tải lên Flash (tức là 'người tải lên được viết bằng Flash', thay vì 'người tải lên nội dung Flash'). Câu hỏi được gắn thẻ với các thẻ asp.net và C#, và với những lựa chọn công nghệ đó, việc kiểm tra phía máy khách bị giới hạn và dễ dàng bị đánh bại. :) – ZombieSheep
Đối với trang web tải lên video, anh ấy nên có nội dung nào đó tốt hơn ở phía máy khách, sau đó là biểu mẫu tải lên HTML. Tải lên nhiều MB không có thanh tiến trình không vui. – Thilo
Bạn có thể kiểm tra chữ ký .flv. Bạn có thể tải xuống đặc điểm kỹ thuật tại đây:
http://www.adobe.com/devnet/flv/
Xem chương "Tiêu đề FLV".
Bên cạnh đó, nếu bạn có một FileInfo fi
, bạn có thể chỉ cần làm:
string ext = fi.Extension;
và nó sẽ giữ phần mở rộng của tập tin (lưu ý: nó sẽ bao gồm các .
, do đó, một kết quả của sự trên có thể là: .jpg
.txt
, và vân vân ....
Bạn chỉ có thể đọc những dòng của một file
using (var target = new MemoryStream())
{
postedFile.InputStream.CopyTo(target);
var array = target.ToArray();
Đầu tiên 5/6 chỉ mục sẽ cho bạn biết loại tệp. Trong trường hợp FLV của nó
byte đọc riêng tĩnh [] FLV = {70, 76, 86, 1, 5};
Just do - var isAllowed = array.Take(5).SequenceEqual(FLV);
nếu có thì FLV của nó.
HOẶC
Đọc nội dung của một tập tin
var contentArray = target.GetBuffer();
var content = Encoding.ASCII.GetString(contentArray);
Đầu tiên hai/ba chữ sẽ cho bạn biết loại tệp. Trong trường hợp của FLV nó
"FLV | \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 ......"
Just do - content.StartsWith("FLV")
Điều này sẽ được xếp hạng cao hơn. Nếu bạn thực sự muốn ứng dụng của mình hoạt động và dữ liệu không đáng tin cậy, bạn nên kiểm tra phần đầu. – PRMan
Giải pháp này cũng giúp trong trường hợp nhiều hơn một phần mở rộng như "Avishay.student.DB"
FileInfo FileInf = new FileInfo(filePath);
string strExtention = FileInf.Name.Replace(System.IO.Path.GetFileNameWithoutExtension(FileInf.Name), "");
Tìm thấy một giải pháp thay thế qua tại DotNetPerls mà tôi thích hơn bởi vì nó không yêu cầu bạn phải chỉ định đường dẫn. Dưới đây là một ví dụ nơi tôi cư một mảng với sự giúp đỡ của một phương pháp 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);
Các 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 tin 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 từ googlechrome, tôi không thành công.
- 1. Hủy bỏ phần mở rộng của một tập tin
- 2. Lấy phần mở rộng tập tin (basename?)
- 3. Thêm phần mở rộng tập tin vào tập tin mở rộng ít hơn
- 4. Batch: Hủy bỏ phần mở rộng tập tin
- 5. asp.net mvc HttpPostedFileBase nhận phần mở rộng tập tin
- 6. Xác thực các phần mở rộng của tập tin từ một mảng
- 7. Regex để có được phần mở rộng tập tin
- 8. Xóa thư mục con và phần mở rộng tập tin
- 9. Tải phần mở rộng tập tin bằng ngôn ngữ C
- 10. Tải phần mở rộng của một tập tin chứa trong NSString
- 11. Văn bản tuyệt vời 2 tìm trong thư mục có phần mở rộng tập tin
- 12. emacs: tìm kiếm một phần của một tên tập tin
- 13. regex Điều gì sẽ tìm hiểu xem tập tin có phần mở rộng url nhất định
- 14. Loại bỏ .php phần mở rộng tập tin với tập tin .htaccess
- 15. Cách được khuyến nghị để tạo một ActionResult với phần mở rộng tập tin
- 16. Bắt mở rộng của tập tin trong FileUpload kiểm soát
- 17. Mở rộng tập tin kiểm tra PHP
- 18. PHP tập tin liệt kê nhiều phần mở rộng tập tin
- 19. ms mở rộng tập tin văn phòng
- 20. biểu Scala để thay thế một phần mở rộng tập tin trong một chuỗi
- 21. rewriterule trong htaccess để khớp với một số phần mở rộng tập tin nhất định
- 22. Phương thức mở của Ruby mở-uri mất hình ảnh mở rộng tập tin
- 23. Tôi đang cố gắng để tìm tập tin với nhiều phần mở rộng trong một kịch bản shell
- 24. Làm thế nào để grep cho một phần mở rộng tập tin
- 25. Xác định phần mở rộng tập tin được cung cấp cho một FileStream
- 26. mở phần mở rộng tập tin tùy chỉnh từ Google Drive trên Android
- 27. Nhận dạng một tập tin bằng tiếng shebang và không có phần mở rộng
- 28. Tải ImageFormat từ Tiện ích mở rộng Tập tin
- 29. jQuery trong phần mở rộng của Firefox
- 30. Làm một JFileChooser chọn văn bản của tên tập tin nhưng không phải là mở rộng
Nếu có thể, bạn cũng muốn kiểm tra khách hàng, để tránh tải lên không cần thiết. – Thilo
Có, nhưng hãy xem câu trả lời của tôi bên dưới - KHÔNG dựa vào việc kiểm tra phía khách hàng - nó sẽ bị phá vỡ sớm hay muộn. :) – ZombieSheep
Kiểm tra phía máy khách không phải là sự bảo vệ cho máy chủ của bạn mà là sự tiện lợi cho người dùng. – Thilo