it-swarm-ko.tech

파일 업로드의 파일 유형을 확인하려면 어떻게합니까?

<input type="file" id="fileUpload" runat="server">를 사용하여 ASP.NET 응용 프로그램에서 파일을 업로드합니다. 업로드 파일 형식을 제한하고 싶습니다 (예 : .xls 또는 .xlsx 파일 확장명으로 제한).

자바 스크립트 또는 서버 측 유효성 검사가 모두 가능합니다 (파일을 업로드하기 전에 서버 측 유효성 검사가 수행되는 한 매우 큰 파일이 업로드 될 수 있으므로 실제 파일을 업로드하기 전에 모든 유효성 검사가 수행되어야 함) .

36
Yaakov Ellis

업로드 전에 확인을 원하기 때문에 옵션이 제한적인 것 같습니다. 가장 좋은 방법은 javascript를 사용하여 파일 확장자를 확인하는 것입니다. 유효한 확장자의 해시를 작성한 다음 업로드중인 파일의 확장자가 해시에 있는지 확인할 수 있습니다.

HTML :

<input type="file" name="FILENAME"  size="20" onchange="check_extension(this.value,"upload");"/>
<input type="submit" id="upload" name="upload" value="Attach" disabled="disabled" />

자바 스크립트 :

var hash = {
  'xls'  : 1,
  'xlsx' : 1,
};

function check_extension(filename,submitId) {
      var re = /\..+$/;
      var ext = filename.match(re);
      var submitEl = document.getElementById(submitId);
      if (hash[ext]) {
        submitEl.disabled = false;
        return true;
      } else {
        alert("Invalid filename, please select another file");
        submitEl.disabled = true;

        return false;
      }
}
30
Jamie

정규식 유효성 검사기를 사용하면 매우 간단합니다.

<asp:RegularExpressionValidator
id="RegularExpressionValidator1"
runat="server"
ErrorMessage="Only Zip file is allowed!"
ValidationExpression ="^.+(.Zip|.Zip)$"
ControlToValidate="FileUpload1"
> </asp:RegularExpressionValidator>

업로드 할 수있는 파일 형식의 클라이언트 측 유효성 검사

26
shailesh

Javascript에서 onsubmit 핸들러에서 파일 이름을 얻을 수 있어야합니다. 따라서 귀하의 경우 다음과 같이해야합니다.

<form onsubmit="if (document.getElementById('fileUpload').value.match(/xls$/) || document.getElementById('fileUpload').value.match(/xlsx$/)) { alert ('Bad file type') ; return false; } else { return true; }">...</form>
6
staktrace

Chris는 확장자를 확인하는 것이 파일 형식을 확인하는 것이 아니라고 동의합니다. Telerik 's radUpload 아마도 가장 좋은 옵션 일 것입니다. 업로드중인 파일의 ContentType 속성을 제공하며, 알려진 mime 유형과 비교할 수 있습니다. 다음을 확인해야합니다.

application/vnd.ms-Excel,

응용 프로그램/엑셀,

응용 프로그램/x-msexcel

새로운 2k7 형식의 경우 :

application/vnd.openxmlformatsofficedocument.spreadsheetml.sheet

Telerik은 radUpload를 개별 구성 요소로 판매했지만 이제는 제어 제품군으로 포장되어 조금 비싸지 만 실제 유형을 확인하는 가장 쉬운 방법입니다.

6
kd7

업로드 컨트롤에서 정규식 유효성 검사기를 사용할 수 있습니다.

  <asp:RegularExpressionValidator id="FileUpLoadValidator" runat="server" ErrorMessage="Upload Excel files only." ValidationExpression="^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))(.xls|.XLS|.xlsx|.XLSX)$" ControlToValidate="fileUpload"> </asp:RegularExpressionValidator>

입력 태그의 accept 속성도 있습니다 :

<input type="file" accept="application/msexcel" id="fileUpload" runat="server">

그러나 이것을 시도했을 때 큰 성공을 거두지 못했습니다 (FF3 및 IE7 사용)

4
AlexWilson

일부 사람들이 언급했듯이 Javascript는 갈 길입니다. 여기서 "유효성 검사"는 파일 확장자에 의한 것이므로 파일이 실제 Excel 스프레드 시트인지는 검증하지 않습니다!

3
Jonathan Arkell

파일 내용 유형을 확인하라는 kd7의 응답을 기반으로 래퍼 방법은 다음과 같습니다.

private bool FileIsValid(FileUpload fileUpload)
{
    if (!fileUpload.HasFile)
    {
        return false;
    }
    if (fileUpload.PostedFile.ContentType == "application/vnd.ms-Excel" ||
        fileUpload.PostedFile.ContentType == "application/Excel" ||
        fileUpload.PostedFile.ContentType == "application/x-msexcel" ||
        fileUpload.PostedFile.ContentType == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" //this is xlsx format
        )
        return true;

    return false;
}

업로드 할 파일이 .xls 또는 .xlsx이면 true를 반환

3
m_cheung

.aspx, .asp 등과 같은 악의 파일을 업로드 할 수 없도록 서버 측에서 파일 확장자를 항상 확인하십시오.

2
dr. evil

글쎄-포스트 백 중에 파일이 제출 (업로드)되므로 포스트 백에서 서버 측에서 수행 할 수 없습니다.

JavaScript를 사용하여 클라이언트에서 할 수 있다고 생각합니다. 개인적으로 radUpload by Telerik 이라는 타사 구성 요소를 사용합니다. 클라이언트 측 및 서버 측 API가 우수하며 큰 파일 업로드를위한 진행률 표시 줄을 제공합니다.

사용 가능한 오픈 소스 솔루션도 있다고 확신합니다.

1
Chris Roberts

다른 옵션으로, 어떤 MIME 유형이 허용되는지 정의하는 HTML 파일 입력의 "accept"속성을 사용할 수 있습니까?.

정의 여기

1
chillysapien

표준 Asp.Net 제어를 피하고 Brettle Development의 NeadUpload 구성 요소를 사용하십시오. http://www.brettle.com/neatupload

빠르고 사용하기 쉬우 며 구성 파일의 maxRequestLength 매개 변수에 대해 걱정하지 않고 매우 쉽게 통합 할 수 있습니다.

1
massimogentilini

나는 이것을하는 다른 방법이 있다고 생각합니다. 나는 ASP에 익숙하지 않기 때문에 특정 파일 형식을 확인하는 힌트 만 줄 수 있습니다.

1) 안전한 방법 : 전달하려는 파일 형식의 헤더에 대한 자세한 정보를 얻으십시오. 업로드 된 파일을 구문 분석하고 헤더를 비교

2) 빠른 방법 : 파일 이름을 두 조각으로 나눕니다-> 파일 이름과 파일 끝. 파일의 끝을 확인하고 업로드 할 파일 형식과 비교하십시오

그것이 도움이되기를 바랍니다 :)

1
DeeCee

서버 측은 파일이 이미 업로드되었음을 의미하므로 유일한 옵션은 클라이언트 측 유효성 검사 인 것 같습니다. 또한 MIME 유형은 일반적으로 파일 확장자에 의해 결정됩니다.

jQuery와 같은 JavaScript 프레임 워크를 사용하여 양식의 onsubmit 이벤트를 오버로드하십시오. 그런 다음 확장을 확인하십시오. 이것은 대부분의 시도를 제한합니다. 그러나 사람이 이미지를 확장 XLS로 변경하면 문제가 발생합니다.

이것이 당신을위한 옵션인지는 모르겠지만 Silverlight 또는 Flash와 같은 것을 사용하여 업로드 할 때 더 많은 클라이언트 측 제어 기능이 있습니다. 업로드 프로세스에 이러한 기술 중 하나를 사용하는 것이 좋습니다.

0
Nick Berardi

다른 응답자가 지적한 바와 같이, 파일 유형은 스푸핑 될 수 있으며 (예 : .exe로 이름이 .pdf로 변경됨) MIME 유형을 확인하면 막을 수 없습니다 (예 : .exe로 이름이 바뀌면 "application/pdf"의 MIME이 표시됨). pdf). 실제 파일 형식에 대한 검사는 서버 측에서만 수행 할 수 있다고 생각합니다. System.IO.BinaryReader를 사용하여 확인하는 쉬운 방법은 다음과 같습니다.

http://forums.asp.net/post/2680667.aspx

그리고 VB 여기 버전 :

http://forums.asp.net/post/2681036.aspx

확인하려는 파일 형식에 대한 이진 '코드'를 알아야하지만이 솔루션을 구현하고 코드를 디버깅하여 가져올 수 있습니다.

0
Mark_fsg

클라이언트 측 유효성 검사 :-

HTML :

<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="btnUpload" runat="server" Text="Upload" OnClientClick = "return ValidateFile()"  OnClick="btnUpload_Click"  />
<br />
<asp:Label ID="Label1" runat="server" Text="" />

자바 스크립트 :

<script type ="text/javascript">

    var validFilesTypes=["bmp","gif","png","jpg","jpeg","doc","xls"];

    function ValidateFile()

    {

      var file = document.getElementById("<%=FileUpload1.ClientID%>");

      var label = document.getElementById("<%=Label1.ClientID%>");

      var path = file.value;

      var ext=path.substring(path.lastIndexOf(".")+1,path.length).toLowerCase();

      var isValidFile = false;

      for (var i=0; i<validFilesTypes.length; i++)    
      {    
        if (ext==validFilesTypes[i])    
        {    
            isValidFile=true;    
            break;    
        }    
      }

      if (!isValidFile)    
      {    
        label.style.color="red";    
        label.innerHTML="Invalid File. Please upload a File with" +    
         " extension:\n\n"+validFilesTypes.join(", ");    
      }    
      return isValidFile;    
     }    
</script>
0
Rana