Web uygulamamda (asp.net, c #) bir sayfaya video dosyası yüklüyorum ancak sadece flv videoları yüklemek istiyorum. Diğer uzantı videolarını yüklerken nasıl kısıtlayabilirim?
Web uygulamamda (asp.net, c #) bir sayfaya video dosyası yüklüyorum ancak sadece flv videoları yüklemek istiyorum. Diğer uzantı videolarını yüklerken nasıl kısıtlayabilirim?
Yanıtlar:
string myFilePath = @"C:\MyFile.txt";
string ext = Path.GetExtension(myFilePath);
// ext would be ".txt"
Bir dosyanın akışını basitçe okuyabilirsiniz
using (var target = new MemoryStream())
{
postedFile.InputStream.CopyTo(target);
var array = target.ToArray();
}
İlk 5/6 dizin size dosya türünü söyleyecektir. FLV durumunda 70, 76, 86, 1, 5 .
private static readonly byte[] FLV = { 70, 76, 86, 1, 5};
bool isAllowed = array.Take(5).SequenceEqual(FLV);
eğer isAllowedeşitse trueo zaman FLV.
VEYA
Bir dosyanın içeriğini okuyun
var contentArray = target.GetBuffer();
var content = Encoding.ASCII.GetString(contentArray);
İlk iki / üç harf size dosya türünü söyleyecektir.
FLV durumunda "FLV ......"
content.StartsWith("FLV")
Sunucuda MIME türünü kontrol edebilir, flv mime türünü buradan veya google'da arayabilirsiniz.
Mime türünün
video/x-flv
Örneğin, C #'da bir FileUpload kullanıyorsanız, şunları yapabilirdiniz:
FileUpload.PostedFile.ContentType == "video/x-flv"
İstemci tarafında [*] kullanıcının yüklediği dosya türünü kısıtlayamazsınız. Bunu yalnızca sunucu tarafında yapabileceksiniz. Bir kullanıcı yanlış bir dosya yüklerse, bunu ancak dosya yüklendiğinde tanıyabilirsiniz. Bir kullanıcının istediği dosya formatını yüklemesini durdurmanın güvenilir ve güvenli bir yolu yoktur.
[*] evet, yüklemeye başlamadan önce dosya uzantısını tespit etmek için her türlü zekice şey yapabilirsiniz, ancak ona güvenmeyin. Birisi bunun üstesinden gelecek ve er ya da geç istediği şeyi yükleyecektir.
.Flv imzasını kontrol edebilirsiniz. Özellikleri buradan indirebilirsiniz:
http://www.adobe.com/devnet/flv/
"FLV başlığı" bölümüne bakın.
DotNetPerls'de bir yol belirlemenizi gerektirmediği için daha çok sevdiğim alternatif bir çözüm buldum . İşte bir diziyi özel bir yöntem yardımıyla doldurduğum bir örnek
// 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);
Yukarıdaki yöntem firefox ve IE ile iyi çalışıyor, zip, txt, xls, xlsx, doc, docx, jpg, png gibi her tür dosyayı görüntüleyebiliyorum
ancak googlechrome'dan dosyanın uzantısını bulmaya çalıştığımda başarısız oldum.
Uzantıyı almakla paralel olarak uzantının nasıl kaldırılacağını da belirtmekte fayda var:
var name = Path.GetFileNameWithoutExtension(fileFullName); // Get the name only
var extension = Path.GetExtension(fileFullName); // Get the extension only