[C#] C #에서 파일의 확장자를 찾는 방법은 무엇입니까?

내 웹 응용 프로그램 (asp.net, c #)에서 페이지에 비디오 파일을 업로드하고 있지만 flv 비디오 만 업로드하고 싶습니다. 다른 확장 동영상을 업로드 할 때 어떻게 제한 할 수 있습니까?



답변

Path.GetExtension

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);

처음 두세 글자는 파일 형식을 알려줍니다.
FLV의 경우 “FLV ……”

content.StartsWith("FLV")


답변

서버에서 MIME 유형을 확인할 수 있습니다. 여기 또는 Google에서 flv mime 유형을 검색하십시오.

MIME 유형이

video/x-flv

예를 들어 C #에서 FileUpload를 사용하고 있다면

FileUpload.PostedFile.ContentType == "video/x-flv"


답변

이것이 당신이 원하는 것인지 확실하지 않지만 :

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

또는:

Path.GetExtension(@"c:\test.flv")


답변

또한가있는 경우 FileInfo fi간단하게 수행 할 수 있습니다.

string ext = fi.Extension;

파일의 확장명을 보유합니다 (참고 :을 포함 .하므로 위의 결과는 다음 .jpg .txt과 같습니다 .


답변

사용자가 클라이언트 측에서 업로드하는 파일 형식을 제한 할 수 없습니다 [*]. 서버 측에서만이 작업을 수행 할 수 있습니다. 사용자가 잘못된 파일을 업로드하면 파일이 업로드 된 후에 만 ​​파일을 인식 할 수 있습니다. 사용자가 원하는 파일 형식을 업로드하지 못하게하는 안전하고 안전한 방법은 없습니다.

[*] 예, 업로드를 시작하기 전에 파일 확장명을 감지하기 위해 모든 종류의 영리한 작업을 수행 할 수 있지만 파일에 의존하지는 마십시오. 누군가 주위를 돌아 다니며 조만간 원하는 것을 업로드합니다.


답변

.flv 서명을 확인할 수 있습니다. 여기에서 사양을 다운로드 할 수 있습니다.

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

“FLV 헤더”장을 참조하십시오.