jQuery로 파일 입력 크기를 확인하는 방법은 무엇입니까?


135

파일 업로드 기능이있는 양식이 있으며 사용자가 업로드하려고하는 파일이 너무 큰 경우 클라이언트 측 오류보고를 원합니다 .jQuery를 사용하여 파일 크기를 순수하게 검사하는 방법이 있습니까? 클라이언트에서 또는 어떻게 든 파일을 서버에 다시 게시하여 확인 하시겠습니까?

답변:


275

실제로 파일 시스템에 액세스 할 수는 없지만 (예 : 로컬 파일 읽기 및 쓰기) HTML5 File Api 사양으로 인해 액세스 할 수있는 파일 속성이 있으며 파일 크기가 그 중 하나입니다.

아래 HTML

<input type="file" id="myFile" />

다음을 시도하십시오 :

//binds to onchange event of your input field
$('#myFile').bind('change', function() {

  //this.files[0].size gets the size of your file.
  alert(this.files[0].size);

});

HTML5 사양의 일부이므로 최신 브라우저 (IE에는 v10 필요)에서만 작동 하며 알아야 할 다른 파일 정보에 대한 자세한 내용과 링크를 여기에 추가했습니다. http://felipe.sabino.me/javascript / 2012 / 01 / 30 / javascipt-checking-the-file-size /


오래된 브라우저 지원

이전 브라우저는 null이전 this.files호출에 대한 값을 반환 하므로 액세스 this.files[0]하면 예외가 발생 하므로 사용하기 전에 File API 지원을 확인 해야 합니다.


6
누구나 할 수 없다고 말하지만 아직 여기에 있습니다. 작동합니다. 나는 그것을 테스트했다.
Peter

35
@Jeroen IE를 위해 일하지 않으면 많은 사람들에게 이상적인 솔루션이 아니지만 투표를하지 않고 대답이 너무 쓸모 없다고 말하는 데 동의합니다. 크롬 및 파이어 폭스에서만 작동 해야하는 광범위한 엔터프라이즈 웹 솔루션 에서이 솔루션을 사용 했으며이 솔루션을 찾는 일부 사람들이 같은 위치에있을 수 있으므로이 솔루션으로 충분합니다. .
Felipe Sabino

3
방금 Google 에서이 답변을 보았으며 주어진 크기를 초과하는 파일을 게시하는 사용자를 중지하는 데 사용하려고합니다. 서버 측에서도 파일 크기를 확인하면서 IE8에서 작동하지 않는 클라이언트 측 솔루션을 기쁘게 생각합니다.
Steve Wilkes

2
@GaolaiPeng이 오류는 아마도 jQueryjavascript 파일이 추가되지 않았거나 제대로로드되지 않았기 때문일 수 있습니다. head페이지에 추가 했습니까?
Felipe Sabino

1
@volumeone 그렇기 때문에 제 대답에서 "사용하기 전에 파일 API 지원을 확인하십시오"라고 말한 다음 그에 따라 UI를 변경할 수 있습니다.
Felipe Sabino

41

jQuery를 사용하려면 validate다음 메소드를 작성하십시오.

$.validator.addMethod('filesize', function(value, element, param) {
    // param = size (en bytes) 
    // element = element to validate (<input>)
    // value = value of the element (file name)
    return this.optional(element) || (element.files[0].size <= param) 
});

당신은 그것을 사용할 것입니다 :

$('#formid').validate({
    rules: { inputimage: { required: true, accept: "png|jpe?g|gif", filesize: 1048576  }},
    messages: { inputimage: "File must be JPG, GIF or PNG, less than 1MB" }
});

1
@Dan 예, 파일 크기 속성은 HTML5 사양의 일부이므로 최신 브라우저에서만 작동합니다 (IE의 경우 버전 10 이상임)
Felipe Sabino

7
accept규칙을 사용해야했던 규칙을 잘못 사용했습니다 extension. ~ 규칙은 오직 MIME 유형입니다. 규칙은 파일 확장자입니다. 이러한 규칙에 대한 파일 도 포함해야합니다 . acceptextensionadditional-methods.js
Sparky

$('#formid').validate({ rules: { inputimage: { required: true, extension: "png|jpe?g|gif", filesize: 1048576 }}, messages: { inputimage: "File must be JPG, GIF or PNG, less than 1MB" } });
@Sparky

26

이 코드는 :

$("#yourFileInput")[0].files[0].size;

양식 입력의 파일 크기를 반환합니다.

FF 3.6 이상에서이 코드는 다음과 같아야합니다.

$("#yourFileInput")[0].files[0].fileSize;

2
주먹 코드는 크롬으로 작동하지만 FireFox 최신에서는 두 번째 코드가 작동하지 않습니다.
Débora

그 두 번째 코드는 모든 최신 (2014 + 브라우저)에 사용해야했습니다.
Dreamcasting

1
첫 번째 코드는 IE 10, 11, Edge, Chrome, Safari (Windows 버전), Brave 및 Firefox에서 작동합니다.
Mashukur Rahman 2016

12

ASP.NET FileUpload컨트롤에 사용되는 솔루션도 게시하고 있습니다 . 아마도 누군가가 유용하다고 생각할 것입니다.

    $(function () {        
    $('<%= fileUploadCV.ClientID %>').change(function () {

        //because this is single file upload I use only first index
        var f = this.files[0]

        //here I CHECK if the FILE SIZE is bigger than 8 MB (numbers below are in bytes)
        if (f.size > 8388608 || f.fileSize > 8388608)
        {
           //show an alert to the user
           alert("Allowed file size exceeded. (Max. 8 MB)")

           //reset file upload control
           this.value = null;
        }
    })
});

1
값을 null로 확인해야 f = this.files[0]합니다. 그렇지 않으면 이전 브라우저에서 실패합니다. 예if (f && (f.size > 8388608 || f.fileSize > 8388608))
Gone 코딩

9

아래를 사용하여 파일 크기를 확인하고 더 큰지 확인하십시오.

    $("input[type='file']").on("change", function () {
     if(this.files[0].size > 2000000) {
       alert("Please upload file less than 2MB. Thanks!!");
       $(this).val('');
     }
    });

1
$ (this) .val (null);을 사용해야합니다. 그렇지 않으면 적절한 첨부 파일을 선택하지 않으면 양식이 더 이상 올바르게 제출되지 않는 것 같습니다.
케빈 그래버

1

이러한 유형의 검사는 Flash 또는 Silverlight에서는 수행 할 수 있지만 Javascript에서는 수행 할 수 없습니다. 자바 스크립트 샌드 박스는 파일 시스템에 대한 액세스를 허용하지 않습니다. 크기 확인은 업로드 된 후 서버 측에서 수행해야합니다.

Silverlight / Flash 경로로 이동하려면 기본 컨트롤을 사용하는 일반 파일 업로드 처리기가 기본값으로 설치되어 있지 않은지 확인할 수 있습니다. 이렇게하면 Silverlight / Flash가 설치되어 있으면 경험이 조금 더 풍부 해집니다.


1
<form id="uploadForm" class="disp-inline" role="form" action="" method="post" enctype="multipart/form-data">
    <input type="file" name="file" id="file">
</form>
<button onclick="checkSize();"></button>
<script>
    function checkSize(){
        var size = $('#uploadForm')["0"].firstChild.files["0"].size;
        console.log(size);
    }
</script>

표준 ajax / html5 메소드를 통해 양식을 제출하지 않으려는 경우 이것이 가장 쉬운 것으로 나타났습니다.

노트:

var size = $('#uploadForm')["0"]["0"].files["0"].size;

이것은 작동했지만 더 이상 크롬이 아니며 위의 코드를 테스트했으며 ff와 chrome (마지막)에서 모두 작동했습니다. 두 번째 [ "0"]은 이제 firstChild입니다.


0

Plese는 이것을 시도하십시오 :

var sizeInKB = input.files[0].size/1024; //Normally files are in bytes but for KB divide by 1024 and so on
var sizeLimit= 30;

if (sizeInKB >= sizeLimit) {
    alert("Max file size 30KB");
    return false;
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.