私のWebアプリケーション(asp.net、c#)では、ページにビデオファイルをアップロードしていますが、flvビデオのみをアップロードしたいと思います。他の拡張機能動画をアップロードするときに制限するにはどうすればよいですか?
私のWebアプリケーション(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等しい場合true、そのFLV。
または
ファイルの内容を読み取る
var contentArray = target.GetBuffer();
var content = Encoding.ASCII.GetString(contentArray);
最初の2、3文字でファイルの種類がわかります。
FLVの場合、「FLV ......」
content.StartsWith("FLV")
サーバーでは、MIMEタイプを確認し、flv MIMEタイプをここまたはGoogleで検索できます。
MIMEタイプが
video/x-flv
たとえば、C#でFileUploadを使用している場合は、
FileUpload.PostedFile.ContentType == "video/x-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);
}
拡張を取得するのと並行して、拡張を削除する方法についても言及する価値があります。
var name = Path.GetFileNameWithoutExtension(fileFullName); // Get the name only
var extension = Path.GetExtension(fileFullName); // Get the extension only