2010-03-14 6 views
3

asp.net & C#으로 업로드하기 전에 파일 확장명을 사용하지 않고 파일 형식 (jpg와 같은 형식)을 어떻게 확인할 수 있습니까?asp.net에서 업로드하기 전에 파일 형식을 어떻게 확인할 수 있습니까?

내가 2008 + asp.net + C#을 + TELERIK 컨트롤 (RadUpload) 대 사용하고


일부 몸이 JPG에 텍스트 파일의 확장자를 변경 및 radupload로 업로드 conrol에서 선택 상상. ..

이 파일이 정말로 jpg인지 아닌지 어떻게 알 수 있습니까?

+0

왜이 질문> 1K 전망이 있는가!? Lol – Nathan

답변

1

예 :

// generate new Guid 
Guid fileguid = Guid.NewGuid(); 

// set limit for images, 1920x1200 pixels 
int imageWidth = 1920; 
int imageHeight = 1200; 
int maxFileSize = 8388608; 
// web.config - httpRuntime - maxRequestLength="8192" 
// 8,388,608 Bytes 
// 8,192 KB (/ 1024) 
// 8.00 MB (/ 1024/1024) 

string sConn = ConfigurationManager.ConnectionStrings["AssetsDBCS"].ConnectionString; 
SqlConnection objConn = new SqlConnection(sConn); 
objConn.Open(); 
SqlCommand objCmd = new SqlCommand("sp_FileStorage_New", objConn); 
objCmd.CommandType = CommandType.StoredProcedure; 

SqlParameter paramFileGuid = objCmd.Parameters.Add("@FileGuid", SqlDbType.UniqueIdentifier); 
SqlParameter paramFileSubject = objCmd.Parameters.Add("@Subject", SqlDbType.VarChar); 
SqlParameter paramFileContentType = objCmd.Parameters.Add("@ContentType", SqlDbType.VarChar); 
SqlParameter paramFileData = objCmd.Parameters.Add("@BinaryData", SqlDbType.VarBinary); 
SqlParameter paramFileSize = objCmd.Parameters.Add("@Filesize", SqlDbType.BigInt); 
SqlParameter paramFileDesc = objCmd.Parameters.Add("@Description", SqlDbType.VarChar); 
SqlParameter paramIsSLAFile = objCmd.Parameters.Add("@IsSLAFile", SqlDbType.Bit); 
SqlParameter paramUserStamp = objCmd.Parameters.Add("@UserStamp", SqlDbType.VarChar); 

paramFileGuid.Direction = ParameterDirection.Input; 
paramFileSubject.Direction = ParameterDirection.Input; 
paramFileContentType.Direction = ParameterDirection.Input; 
paramFileData.Direction = ParameterDirection.Input; 
paramFileSize.Direction = ParameterDirection.Input; 
paramFileDesc.Direction = ParameterDirection.Input; 
paramIsSLAFile.Direction = ParameterDirection.Input; 
paramUserStamp.Direction = ParameterDirection.Input; 

// read data 
byte[] bData = new byte[fuOne.PostedFile.ContentLength]; 
Stream objStream = fuOne.PostedFile.InputStream; 
objStream.Read(bData, 0, fuOne.PostedFile.ContentLength); 

paramFileSubject.Value = txtSubject.Text; 

objCmd.Parameters.Add("@FileName", SqlDbType.VarChar).Value = Path.GetFileName(fuOne.PostedFile.FileName); 
objCmd.Parameters.Add("@Extension", SqlDbType.VarChar).Value = Path.GetExtension(fuOne.PostedFile.FileName); 

paramFileGuid.Value = fileguid; 

paramFileContentType.Value = fuOne.PostedFile.ContentType; 
paramFileData.Value = bData; 
paramFileSize.Value = fuOne.PostedFile.ContentLength; 
paramFileDesc.Value = fuOne.PostedFile.FileName; 
paramIsSLAFile.Value = cbIsSLAFile.Checked; 
paramUserStamp.Value = ac.getUser(); 

if (fuOne.PostedFile.ContentLength < maxFileSize) 
{ 

    switch (fuOne.PostedFile.ContentType) 
    { 
     case "image/pjpeg": 
      { 

       System.Drawing.Image iImage = System.Drawing.Image.FromStream(new MemoryStream(bData)); 

       if (iImage.Width > imageWidth || iImage.Height > imageHeight) 
       { 
        lblStatus.Text = "The image width or height cannot be greater than " + imageHeight + " x " + imageWidth + " pixels"; 
       } 
       else 
       { 
        objCmd.ExecuteNonQuery(); 
        objConn.Close(); 

        hlDownload.Visible = true; 
        hlDownload.NavigateUrl = "Download.aspx?DownloadFileGuid=" + fileguid.ToString(); 
        hlDownload.Text = "Click here to download the uploaded file"; 

        hlShowFile.Visible = true; 
        hlShowFile.NavigateUrl = "Download.aspx?ShowFileGuid=" + fileguid.ToString(); 
        hlShowFile.Text = "Click here to view the uploaded file"; 

        lblStatus.Text = showUploadFileInfo(Path.GetFileName(fuOne.PostedFile.FileName), fuOne.PostedFile.ContentType, fuOne.PostedFile.ContentLength, iImage.Width, iImage.Height); 
       } 
       break; 
      } 
    } 
} 
+0

(귀하의 코드는 fileupload에 관한 것이고 나는 RadUpload에서 contentType을 테스트했습니다 ...) (하지만 텍스트 파일 확장자를 jpg로 변경하면 RadUpload는 그 contenttype을 생각합니다. 파일이 "image/pjpeg"인 경우) (내가 테스트 함) (이 문제는 파일 업로드에 존재한다고 생각합니다.) (우리는 이것을 설명 할 수 있습니다!) – MoonLight

2

업로드하기 전에 나가야 할 것은 이름뿐입니다. 그렇게 할 수 없었습니다. 파일을 업로드하고 파일 내용을 검사 한 다음 원하는 내용이 아닌 경우 삭제할 수 있습니다.

<telerik:RadUpload ID="RadUpload1" 
       runat="server" 
       InitialFileInputsCount="1" 
       AllowedFileExtensions=".zip,.jpg,.jpeg" 
      /> 

그러나 다른 서버 측보다 당신이 파일의 내용 유형을 검사 할 수 없습니다

2

Telerik 당신이 'AllowedFileExtensions'속성을 사용하여 클라이언트 측 유효성 검사를 수행 할 수 있습니다.

마이클

0

당신은 등등 Java 애플릿, 플래시 ... 같은 클라이언트 측 응용 프로그램을 실행하지 않고 업로드하기 전에 파일을 검사 할 수 없습니다. 이것이 ShutteryFly와 같은 대부분의 이미지 호스팅/편집 사이트가 파일 시스템에 대한 권한을 가진 브라우저 플러그인을 사용하는 이유입니다.

2

파일의 내용을 결정하기 위해 파일 확장자에 의존해서는 안됩니다. 확장 프로그램은 무엇이라도 이름을 바꿀 수 있습니다.

파일 형식을 결정할 수있는 유일한 방법은 파일 자체를 보는 것입니다. 당신은 쉽게 그것을 클라이언트에서 할 수 없습니다. 파일을 격리 보관 디렉터리에 업로드 한 다음 서버의 해당 디렉터리에서 파일을 검사 한 다음 파일을 신뢰할 수있는 최상의 위치로 이동해야합니다.

어쨌든 파일을 바이러스 검색해야합니다.

관련 문제