私のWebアプリケーション(asp.net、c#)で、ページにビデオファイルをアップロードしていますが、flvビデオのみをアップロードしたいと思います。他の拡張ビデオをアップロードするときに制限するにはどうすればよいですか?
12 に答える
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
そのFLV。
また
ファイルの内容を読む
var contentArray = target.GetBuffer();
var content = Encoding.ASCII.GetString(contentArray);
最初の2〜3文字で、ファイルの種類がわかります。
FLVの場合は「FLV......」
content.StartsWith("FLV")
サーバーでは、MIMEタイプを確認し、ここまたはgoogleでflvmimeタイプを検索できます。
mimeタイプが
video/x-flv
たとえば、C#でFileUploadを使用している場合は、次のことができます。
FileUpload.PostedFile.ContentType == "video/x-flv"
string FileExtn = System.IO.Path.GetExtension(fpdDocument.PostedFile.FileName);
上記の方法はFirefoxとIEで正常に機能します。zip、txt、xls、xlsx、doc、docx、jpg、pngなどのすべての種類のファイルを表示できます。
しかし、Google Chromeからファイルの拡張子を見つけようとすると、失敗します。
これがあなたが望むものかどうかはわかりませんが:
Directory.GetFiles(@"c:\mydir", "*.flv");
または:
Path.GetExtension(@"c:\test.flv")
さらに、を持っている場合は、次のようFileInfo fi
にすることができます。
string ext = fi.Extension;
そして、ファイルの拡張子を保持します(注:これには、が含まれる.
ため、上記の結果は次のようになります:.jpg
.txt
、など。。。。
パスを指定する必要がないため、 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);
}
拡張機能の取得と並行して拡張機能を削除する方法についても言及する価値があります。
var name = Path.GetFileNameWithoutExtension(fileFullName); // Get the name only
var extension = Path.GetExtension(fileFullName); // Get the extension only
ユーザーがクライアント側でアップロードするファイルの種類を制限することはできません[*]。これはサーバー側でのみ実行できます。ユーザーが間違ったファイルをアップロードした場合、ファイルがアップロードされてアップロードされた後にのみ認識できます。ユーザーが必要なファイル形式をアップロードするのを防ぐための信頼できる安全な方法はありません。
[*]はい、アップロードを開始する前にファイル拡張子を検出するためにあらゆる種類の巧妙なことを行うことができますが、それに依存しないでください。誰かがそれを回避し、遅かれ早かれ好きなものをアップロードします。
private string GetExtension(string attachment_name)
{
var index_point = attachment_name.IndexOf(".") + 1;
return attachment_name.Substring(index_point);
}
このソリューションは、「Avishay.student.DB」のような複数の拡張子の場合にも役立ちます
FileInfo FileInf = new FileInfo(filePath);
string strExtention = FileInf.Name.Replace(System.IO.Path.GetFileNameWithoutExtension(FileInf.Name), "");