2014-05-15 3 views
2

Google 검색 결과를 통해 매직 번호를 사용하여 파일의 콘텐츠 유형을 식별 할 수 있음을 알았습니다.일반 텍스트 파일의 매직 번호

내 프로그램에서 서버 측에서 파일 내용 유형의 유효성을 검사하고 싶습니다.

내 클라이언트 측 코드 :

<form action="/Home/Index" method="post" enctype="multipart/form-data"> 
    <input type="file" id="inputFile" value="" onchange="readFileContent(this)" /> 
    <input type="submit" value="Submit" /> 
</form> 

function readFileContent(input) { 
     if (input.files && input.files[0]) { 

      reader = new FileReader(); 
      reader.onload = function (e) { 

       var xhr = new XMLHttpRequest(); 
       xhr.open('POST', '/Home/CheckFileType', true); 
       xhr.setRequestHeader("Content-Type", "multipart/form-data"); 
       xhr.setRequestHeader('X-File-Name', input.files[0].name); 
       xhr.setRequestHeader('X-File-Type', input.files[0].type); 
       xhr.setRequestHeader('X-File-Size', input.files[0].size); 
       xhr.send(input.files[0]); 
       xhr.onreadystatechange = function() { 
        if (xhr.readyState == 4 && xhr.status == 200) { 
         alert(xhr.responseText); 
        } 
       } 

      }; 
      reader.readAsText(input.files[0]); 
     } 
    } 

그리고 이것은 내 서버 측 코드 : 일반 텍스트 또는 .txt 파일

답변

5

매직의 매직 넘버는 무엇

[HttpPost] 
     public JsonResult CheckFileType() 
     { 
      string fileType = Request.Headers["X-File-Type"]; 
      byte[] buffer = new byte[Request.InputStream.Length]; 
      Request.InputStream.Read(buffer, 0, Convert.ToInt32(Request.InputStream.Length)); 

      object result = new { status = "finished" }; 
      return Json(result, JsonRequestBehavior.AllowGet); 
     } 

여기서 설명하는 문맥의 숫자는 종종 어떤 종류의 데이터가 이진 파일에 있는지 나타내는 데 사용됩니다. 파일을 구문 분석하는 프로그램은 매직 번호를보고 파일의 나머지 부분으로 무엇을해야하는지 알 수 있습니다. 예를 들어 모든 Java .class 파일 (소스 파일 아님)의 매직 번호는 0xCAFEBABE입니다. 런타임에 클래스 로더가 클래스를로드 할 때 처음 4 바이트를보고 0xCAFEBABE가 아닌 경우 클래스 로더는 파일을 유효한 Java 클래스 파일로 취급하지 않습니다. 자신이 작성한 소프트웨어에 대해 자신 만의 파일 형식을 정의하고 있거나 다른 사람이 쓸 것으로 예상하는 경우, 자신의 마법 번호 또는 숫자를 정의 할 수 있습니다. 소프트웨어가 귀하의 유형의 파일을 만들었을 때 파일에 적절한 매직 번호를 쓰는 것은 소프트웨어의 책임입니다. 파일을 읽는 소프트웨어는 그 마법 번호를 사용하여 수행 할 작업을 결정할 수 있습니다.

일반 텍스트 파일에는 매직 번호가 적합하지 않습니다. 파일에 마법 번호를 쓰면 더 이상 일반 텍스트 파일이 아닙니다. 그것은 당신의 형식을 따르는 파일이 될 것인데, 매직 넘버 다음에 많은 평범한 텍스트가 올 수 있습니다. 그것이 당신이 원하는 것이라면, 그렇게하십시오. 나는 당신의 앱이 무엇을하고 있는지 알지 못하지만 당신의 소프트웨어 (또는 매직 넘버의 기대에 부합하는 다른 소프트웨어)가 파일을 읽고 쓸 수 있다는 것을 알고있는 한 이해할 수있을 것이다.

도움이 되었기를 바랍니다.