如何查找文件的扩展名?
string myFilePath = @"C:\MyFile.txt";
string ext = Path.GetExtension(myFilePath);
// ext would be ".txt"
谢谢你,詹姆斯先生,它很好地工作,谢谢你的回应 – 2009-12-11 09:44:18
这允许别人重命名任何文件* .flv并上传它。根据您的要求,您可能还需要检查MIME类型。 – 2009-12-11 09:44:18
通常根据文件扩展名来设置MIME类型吗? – Thilo 2009-12-11 09:49:01
在你可以在这里或对谷歌检查MIME类型,查找FLV MIME类型的服务器。
你应该检查MIME类型是
video/x-flv
如果你在C#例如,使用一个FileUpload,你可以做
FileUpload.PostedFile.ContentType == "video/x-flv"
我不知道这是什么你想,但:
Directory.GetFiles(@"c:\mydir", "*.flv");
或者:
Path.GetExtension(@"c:\test.flv")
感谢你卡拉先生正在工作 – 2009-12-11 10:03:08
您将无法限制用户在客户端上载的文件类型[*]。你只能在服务器端做到这一点。如果用户上传不正确的文件,则只有在文件上传后才能识别上传。没有可靠和安全的方法来阻止用户上传他们想要的任何文件格式。
[*]是的,你可以做各种聪明的东西来检测文件扩展名,然后再开始上传,但不要依赖它。有人会绕过它,迟早会上传他们喜欢的任何内容。
尽管他无法阻止黑客上传他想要的内容,但他仍然应该检查客户端,以方便用户。 Flash上传应该能够检查文件类型。 – Thilo 2009-12-11 09:40:30
OP没有提到Flash上传器(这是'用Flash写的上传器',而不是'Flash上传器')。这个问题是用asp.net和c#标签标记的,通过这些技术选择,客户端检查是有限的,很容易被打败。 :) – ZombieSheep 2009-12-11 09:44:48
对于视频上传网站,他应该在客户端有更好的东西,然后HTML上传表单。没有进度条的多MB上传并不好玩。 – Thilo 2009-12-11 09:50:52
此外,如果你有一个FileInfo fi
,你可以简单地做:
string ext = fi.Extension;
,它会保持文件的扩展名(注:这将包括.
,因此上述的结果可能是:.jpg
.txt
,等等....
您可以简单地读取文件的流
using (var target = new MemoryStream())
{
postedFile.InputStream.CopyTo(target);
var array = target.ToArray();
第一5/6索引会告诉你文件类型。在FLV的情况下,它的
私有静态只读字节[] FLV = {70,76,86,1,5};
Just do - var isAllowed = array.Take(5).SequenceEqual(FLV);
如果是,那么它的FLV。
OR
阅读文件
var contentArray = target.GetBuffer();
var content = Encoding.ASCII.GetString(contentArray);
前两/三个字母会告诉你该文件类型的内容。如果FLV其
的 “FLV | \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 ......”
Just do - content.StartsWith("FLV")
这应该被评为更高。如果你真的希望你的应用程序工作,并且数据不可信,你应该检查开始。 – PRMan 2017-04-24 21:14:08
该解决方案还有助于在一个以上的分机一样的情况下, “Avishay.student.DB”
FileInfo FileInf = new FileInfo(filePath);
string strExtention = FileInf.Name.Replace(System.IO.Path.GetFileNameWithoutExtension(FileInf.Name), "");
在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);
}
string FileExtn = System.IO.Path.GetExtension(fpdDocument.PostedFile.FileName);
以上方法正常工作与Firefox和IE浏览器的帮助下,我能够查看所有类型,如ZIP,TXT文件, xls,xlsx,doc,docx,jpg,png
但是当我试图从googlechrome找到文件的扩展名时,我失败了。
如果可能,还希望检查客户端,以避免不必要的上传。 – Thilo 2009-12-11 09:37:36
是的,但请参阅下面的答案 - 不要依赖客户端检查 - 它迟早会被绕过。 :) – ZombieSheep 2009-12-11 09:39:26
客户端检查不是为您的服务器提供保护,而是为用户提供便利。 – Thilo 2009-12-11 09:41:14