162

私のWebアプリケーション(asp.net、c#)で、ページにビデオファイルをアップロードしていますが、flvビデオのみをアップロードしたいと思います。他の拡張ビデオをアップロードするときに制限するにはどうすればよいですか?

4

12 に答える 12

310

Path.GetExtension

string myFilePath = @"C:\MyFile.txt";
string ext = Path.GetExtension(myFilePath);
// ext would be ".txt"
于 2009-12-11T09:32:37.307 に答える
26

あなたは単にファイルのストリームを読むことができます

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")
于 2014-07-16T05:50:27.150 に答える
7

サーバーでは、MIMEタイプを確認し、ここまたはgoogleでflvmimeタイプを検索できます。

mimeタイプが

video/x-flv

たとえば、C#でFileUploadを使用している場合は、次のことができます。

FileUpload.PostedFile.ContentType == "video/x-flv"
于 2009-12-11T09:34:33.170 に答える
6
string FileExtn = System.IO.Path.GetExtension(fpdDocument.PostedFile.FileName);

上記の方法はFirefoxとIEで正常に機能します。zip、txt、xls、xlsx、doc、docx、jpg、pngなどのすべての種類のファイルを表示できます。

しかし、Google Chromeからファイルの拡張子を見つけようとすると、失敗します。

于 2018-01-02T11:40:57.817 に答える
5

これがあなたが望むものかどうかはわかりませんが:

Directory.GetFiles(@"c:\mydir", "*.flv");

または:

Path.GetExtension(@"c:\test.flv")
于 2009-12-11T09:38:02.617 に答える
4

さらに、を持っている場合は、次のようFileInfo fiにすることができます。

string ext = fi.Extension;

そして、ファイルの拡張子を保持します(注:これには、が含まれる.ため、上記の結果は次のようになります:.jpg .txt、など。。。。

于 2014-04-06T06:20:10.233 に答える
4

EndsWith()

パスを指定する必要がないため、 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);
        }
于 2016-11-08T21:51:40.347 に答える
4

拡張機能の取得と並行して拡張機能を削除する方法についても言及する価値があります。

var name = Path.GetFileNameWithoutExtension(fileFullName); // Get the name only

var extension = Path.GetExtension(fileFullName); // Get the extension only
于 2018-05-31T00:45:08.483 に答える
2

.flv署名を確認できます。ここから仕様をダウンロードできます。

http://www.adobe.com/devnet/flv/

「FLVヘッダー」の章を参照してください。

于 2009-12-11T09:41:23.120 に答える
2

ユーザーがクライアント側でアップロードするファイルの種類を制限することはできません[*]。これはサーバー側でのみ実行できます。ユーザーが間違ったファイルをアップロードした場合、ファイルがアップロードされてアップロードされた後にのみ認識できます。ユーザーが必要なファイル形式をアップロードするのを防ぐための信頼できる安全な方法はありません。

[*]はい、アップロードを開始する前にファイル拡張子を検出するためにあらゆる種類の巧妙なことを行うことができますが、それに依存しないでください。誰かがそれを回避し、遅かれ早かれ好きなものをアップロードします。

于 2009-12-11T09:38:28.200 に答える
2
private string GetExtension(string attachment_name)
{
    var index_point = attachment_name.IndexOf(".") + 1;
    return attachment_name.Substring(index_point);
}
于 2021-02-19T08:18:06.197 に答える
1

このソリューションは、「Avishay.student.DB」のような複数の拡張子の場合にも役立ちます

                FileInfo FileInf = new FileInfo(filePath);
                string strExtention = FileInf.Name.Replace(System.IO.Path.GetFileNameWithoutExtension(FileInf.Name), "");
于 2015-08-06T07:57:41.357 に答える