내 웹 응용 프로그램 (asp.net, c #)에서 페이지에 비디오 파일을 업로드하고 있지만 flv 비디오 만 업로드하고 싶습니다. 다른 확장 동영상을 업로드 할 때 어떻게 제한 할 수 있습니까?
내 웹 응용 프로그램 (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);
처음 두세 글자는 파일 형식을 알려줍니다.
FLV의 경우 "FLV ......"
content.StartsWith("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);
}