입력 유형 = 파일을 만드는 방법은 pdf 및 xls 만 허용해야합니다.


102

나는 사용했다 <input type= "file" name="Upload" >

이제 .pdf 및 .xls 파일 만 허용하여이를 제한하고 싶습니다.

제출 버튼을 클릭하면이를 확인해야합니다.

웹 페이지에서 파일 (PDF / XLS)을 클릭하면 자동으로 열립니다.

누구든지 이것에 대한 몇 가지 예를 들어 주시겠습니까?

답변:


179

속성을 사용하고 accept허용 된 MIME 유형을 추가하여이를 수행 할 수 있습니다. 그러나 모든 브라우저가 해당 속성을 존중하는 것은 아니며 일부 코드 검사기를 통해 쉽게 제거 할 수 있습니다. 따라서 두 경우 모두 서버 측에서 파일 유형을 확인해야합니다 (두 번째 질문).

예:

<input type="file" name="upload" accept="application/pdf,application/vnd.ms-excel" />

세 번째 질문 "웹 페이지에서 파일 (PDF / XLS)을 클릭하면 자동으로 열립니다."

당신은 그것을 달성 할 수 없습니다. 클라이언트 컴퓨터에서 PDF 또는 XLS를 여는 방법은 사용자가 설정합니다.


안녕하세요 feeela 파일을 업로드하면 서버에 저장됩니다. 나는 그것이 ... 브라우저에서 파일을 클릭하여 열려있는 .PDF와 .XLS 파일에 자바 스크립트 함수가 가능하도록 들었
— Manikandan

그게 다야! 양쪽 클라이언트 및 서버 설명. 멋진 대답

3
선택 상자에 모든 파일을 나열하는 경우. 여전히 모든 파일을 업로드 할 수 있습니다.
— rüff0

59

이것을 사용할 수 있습니다.

HTML

<input name="userfile" type="file" accept="application/pdf, application/vnd.ms-excel" />

지원 만. PDF 및. XLS 파일


14

안타깝게도 선택시 보장 할 수있는 방법은 없습니다.

일부 브라우저 accept는 input태그 속성을 지원합니다 . 이것은 좋은 시작이지만 완전히 신뢰할 수는 없습니다.

<input type="file" name="pic" id="pic" accept="image/gif, image/jpeg" />

a를 사용하고 cfinput유효성 검사를 실행하여 제출시 파일 확장자 를 확인할 수 있지만 MIME 유형은 확인할 수 없습니다. 이것은 더 좋지만 여전히 어리석은 것은 아닙니다. OSX의 파일에는 파일 확장자가없는 경우가 많거나 사용자가 파일 형식을 악의적으로 잘못 지정할 수 있습니다.

ColdFusion 은 결과 속성 ( )을 cffile사용하여 MIME 유형 을 확인할 수 있지만 업로드 후에 만 수행 할 수 있습니다. 이것이 최선의 방법이지만 MIME 유형이 여전히 잘못 될 수 있으므로 여전히 100 % 안전하지는 않습니다.contentTypecffile.contentType


3
확장자를 기반으로 파일을 절대 확인하지 마십시오. lolcat.jpg라는 실행 파일은 어떻습니까?
— feeela

1
phantom42가 여기서 말하려는 것은 서버에서 확장자와 MIME 유형을 확인해야한다는 것입니다. 태그 의 accept속성을 input추가 할 수 있지만 100 % 유효하지는 않습니다.
— Chris Peters

100 % 동의합니다. 신뢰할 수는 없지만 cffile.contenttype과 함께 사용하면 첫 번째 방어선으로 괜찮습니다.
— Joe C

안녕하세요 팬텀 당신이 말했듯이 이것은 IE가 아닌 크롬에서만 작동합니다. 모든 브라우저에 의해 지원 될 것입니다이 작업을 수행하는 anyother 방법이
— Manikandan

불행하게도; 그렇기 때문에 신뢰할 수 없으며 전혀 사용하는 경우 다른 방법과 함께 사용해야한다고 말했습니다.
— Joe C

4

JavaScript를 사용할 수 있습니다. JavaScript로이 작업을 수행하는 데있어 가장 큰 문제는 입력 파일을 재설정하는 것임을 고려하십시오. 음, 이것은 JPG로만 제한됩니다 (PDF의 경우 MIME 유형 과 매직 넘버 를 변경해야합니다 ).

<form id="form-id">
  <input type="file" id="input-id" accept="image/jpeg"/>
</form>

<script type="text/javascript">
    $(function(){
        $("#input-id").on('change', function(event) {
            var file = event.target.files[0];
            if(file.size>=2*1024*1024) {
                alert("JPG images of maximum 2MB");
                $("#form-id").get(0).reset(); //the tricky part is to "empty" the input file here I reset the form.
                return;
            }

            if(!file.type.match('image/jp.*')) {
                alert("only JPG images");
                $("#form-id").get(0).reset(); //the tricky part is to "empty" the input file here I reset the form.
                return;
            }

            var fileReader = new FileReader();
            fileReader.onload = function(e) {
                var int32View = new Uint8Array(e.target.result);
                //verify the magic number
                // for JPG is 0xFF 0xD8 0xFF 0xE0 (see https://en.wikipedia.org/wiki/List_of_file_signatures)
                if(int32View.length>4 && int32View[0]==0xFF && int32View[1]==0xD8 && int32View[2]==0xFF && int32View[3]==0xE0) {
                    alert("ok!");
                } else {
                    alert("only valid JPG images");
                    $("#form-id").get(0).reset(); //the tricky part is to "empty" the input file here I reset the form.
                    return;
                }
            };
            fileReader.readAsArrayBuffer(file);
        });
    });
</script>

이것이 Firefox 및 Chrome의 최신 버전과 IExplore 10에서 테스트되었음을 ​​고려하십시오.

MIME 유형의 전체 목록은 Wikipedia를 참조하십시오 .

매직 넘버의 전체 목록은 Wikipedia를 참조하십시오 .


4

다음과 같이 시도해 볼 수 있습니다.

<input type= "file" name="Upload" accept = "application/pdf,.csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel">

또는 (asp.net mvc에서)

@Html.TextBoxFor(x => x.FileName, new { @id = "doc", @type = "file", @accept = "application/pdf,.csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel" })

2

셸을 포함한 모든 파일을 업로드 할 수있는 Firefox의 라이브 HTTP 헤더와 같은 도구가 있기 때문에 파일 서버 측을 필터링합니다. 사람들이 귀하의 사이트를 해킹 할 수 있습니다. 안전을 위해 서버 사이트를 수행하십시오.


이것은 사실입니다! 이 조언을 무시하지 마십시오
— Rodney Salcedo

1

이 특정 예는 다중 파일 업로드에 대한 것이지만 필요한 일반 정보를 제공합니다.

https://developer.mozilla.org/en-US/docs/DOM/File.type

/ download /에서 파일에 대해 작업하는 한 이것은 자바 스크립트 질문이 아니라 서버 구성입니다. 사용자가 PDF 또는 XLS 파일을 열 수있는 항목이 설치되어 있지 않은 경우 다운로드 할 수 있습니다.


0

파일 업로드 컨트롤을 사용자가 버튼 클릭으로 업로드 할 수있는 파일 유형을 제한하려면 이것이 방법입니다.

<script type="text/JavaScript">
<!-- Begin
function TestFileType( fileName, fileTypes ) {
if (!fileName) return;

dots = fileName.split(".")
//get the part AFTER the LAST period.
fileType = "." + dots[dots.length-1];

return (fileTypes.join(".").indexOf(fileType) != -1) ?
alert('That file is OK!') : 
alert("Please only upload files that end in types: \n\n" + (fileTypes.join(" .")) + "\n\nPlease select a new file and try again.");
}
// -->
</script>

그런 다음 위 버튼의 onClick과 같은 이벤트에서 함수를 호출 할 수 있습니다.

onClick = "TestFileType (this.form.uploadfile.value, [ 'gif', 'jpg', 'png', 'jpeg']);"

이 작업을하기 위해 변경할 수 있습니다 PDF및XLS

여기에서 구현 된 것을 볼 수 있습니다. 데모


감사합니다 Vishal Suthar. 나는이 논리가 내가 앞으로 나아가는 데 확실히 도움이된다고 생각한다.
— Manikandan

그것은 내 pleasure..It는 여전히 upvote에 도움 있는지 없지만 것입니다 .. ?? Manikandan @
— 이씨 Suthar에게

아직도 한 가지 더 의심이 있습니다. 입력 유형 = 파일에서 파일 (PDF & Xls.xlsx 만 해당)을 제한하려고했습니다. 하지만 Google 크롬에서는 잘 작동합니다.하지만 IE에서는이 작업을 수행 할 수 없습니다. IE에서 파일을 제한하는 솔루션이 있습니까? 그렇다면 올바른 길로 가도록하십시오.
— Manikandan

난 그냥 (확인 codestore.net/store.nsf/unid/DOMM-4Q8H9E을 IE에서)하고 그것을 잘 작동합니다 .. @ Manikandan
— 이씨 Suthar

accept-attribute와 비교 하여이 방법은 로컬 시스템에서 파일을 선택할 때 폴더 내용을 선택한 파일 유형으로 좁히지 않습니다.
— feeela
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.