복붙노트

[JQUERY] 업로드 파일 전에 파일 확장자의 검증

JQUERY

업로드 파일 전에 파일 확장자의 검증

해결법


  1. 1.그것은 단지 파일 확장자를 확인하는 것이 가능하지만, 사용자가 쉽게 이름 바꾸기 virus.exe에 virus.jpg 및 검증을 "통과"할 수 있습니다.

    그것은 단지 파일 확장자를 확인하는 것이 가능하지만, 사용자가 쉽게 이름 바꾸기 virus.exe에 virus.jpg 및 검증을 "통과"할 수 있습니다.

    (잘못된 파일을 선택하고 작업의 알림을 볼 제출하려고) : 무엇의 가치를 들어, 여기에 파일 확장자를 확인하는 코드이며, 유효한 확장 중 하나를 충족하지 않을 경우 중단

    VAR의 _validFileExtensions = ".png를" ".gif 중요" ".JPG", ".JPEG", ".BMP"]; 검증 함수 (oForm) { VAR arrInputs = oForm.getElementsByTagName ( "입력"); 경우 (나는 0) { VAR blnValid 거짓 =; 대 (VAR의 J = 0; J <_validFileExtensions.length, J ++) { VAR sCurExtension = _validFileExtensions [J] (- sCurExtension.length, sCurExtension.length) .toLowerCase () == sCurExtension.toLowerCase () sFileName.substr (sFileName.length) {만약 blnValid 사실 =; 단절; } } 만약 (! blnValid) { 경고 ( "죄송합니다"+ sFileName + ", 허용 확장은 무효입니다 :"+ _validFileExtensions.join ( ",")); false를 반환; } } } } true를 반환; }

    파일 : <입력 유형 = "파일"이름 = "내 파일"/>

    참고 코드가 필요 않다면 (sFileName.length> 0) {하고 동료 닫는 대괄호의 경우, 줄을 제거 ... 파일을 선택하지 않고 전송에 대한 사용자를 허용합니다. 코드는 관계없이 그 이름의 형태로 모든 파일 입력 유효성을 검사합니다.

    이것은 적은 라인에 jQuery를 함께 할 수있는,하지만 난 "원시"자바 스크립트와 최종 결과에 편안 충분이 동일 해요.

    경우 당신은 더 많은 파일을, 또는 파일을 변경시 및뿐만 아니라 양식 제출에 검사를 트리거 할 대신 같은 코드를 사용 :

    VAR의 _validFileExtensions = ".png를" ".gif 중요" ".JPG", ".JPEG", ".BMP"]; 함수 ValidateSingleInput (oInput) { (oInput.type == "파일") {경우 VAR sFileName = oInput.value; 경우 (sFileName.length> 0) { VAR blnValid 거짓 =; 대 (VAR의 J = 0; J <_validFileExtensions.length, J ++) { VAR sCurExtension = _validFileExtensions [J] (- sCurExtension.length, sCurExtension.length) .toLowerCase () == sCurExtension.toLowerCase () sFileName.substr (sFileName.length) {만약 blnValid 사실 =; 단절; } } 만약 (! blnValid) { 경고 ( "죄송합니다"+ sFileName + ", 허용 확장은 무효입니다 :"+ _validFileExtensions.join ( ",")); oInput.value = ""; false를 반환; } } } true를 반환; } 파일 1 :
    파일 2 :
    파일 3 :

    이 경고를 표시하고 잘못된 파일 확장자의 경우 입력을 재설정합니다.


  2. 2.기존 답변 없음 요청의 단순화를 위해 매우 컴팩트 충분히 보이지 않았다. 주어진 파일 입력 필드는 다음과 같이 수행 할 수 있습니다 세트에서 확장이 있는지 확인 :

    기존 답변 없음 요청의 단순화를 위해 매우 컴팩트 충분히 보이지 않았다. 주어진 파일 입력 필드는 다음과 같이 수행 할 수 있습니다 세트에서 확장이 있는지 확인 :

    function hasExtension(inputID, exts) {
        var fileName = document.getElementById(inputID).value;
        return (new RegExp('(' + exts.join('|').replace(/\./g, '\\.') + ')$')).test(fileName);
    }
    

    예를 들어, 사용이 될 수 있도록 (여기서 업로드 파일 입력의 ID입니다) :

    if (!hasExtension('upload', ['.jpg', '.gif', '.png'])) {
        // ... block upload
    }
    

    아니면 jQuery 플러그인과 같은 :

    $.fn.hasExtension = function(exts) {
        return (new RegExp('(' + exts.join('|').replace(/\./g, '\\.') + ')$')).test($(this).val());
    }
    

    사용 예제 :

    if (!$('#upload').hasExtension(['.jpg', '.png', '.gif'])) {
        // ... block upload
    }
    

    .replace (/\./ g '는 \\.')이 기본 정보가 임의의 문자와 일치하는 점이없이 전달 될 수 있도록하기위한 정규 표현식 도트가 탈출하는 것이다.

    오류 검사가 짧게 유지하는 이들에 없습니다, 당신이 그들을 사용 아마도 경우는 반드시 입력이 먼저 존재하고 확장 배열이 유효 할 것이다!


  3. 3.

    $(function () {
        $('input[type=file]').change(function () {
            var val = $(this).val().toLowerCase(),
                regex = new RegExp("(.*?)\.(docx|doc|pdf|xml|bmp|ppt|xls)$");
    
            if (!(regex.test(val))) {
                $(this).val('');
                alert('Please select correct file format');
            }
        });
    });
    

  4. 4.내가 대답을 잘 아무도 여기에 아주 ... 시적 없었다 때문에 내가 여기 온 :

    내가 대답을 잘 아무도 여기에 아주 ... 시적 없었다 때문에 내가 여기 온 :

    checkextension 함수 () { var 파일은 document.querySelector ( "#의 fUpload을") =; 경우 (/\.(jpe?g|png|gif)$/i.test(file.files[0].name) === 거짓) {경고 ( "없습니다 이미지!"); } }


  5. 5.확인 해당 파일을 선택하거나하지 않은 경우

    확인 해당 파일을 선택하거나하지 않은 경우

           if (document.myform.elements["filefield"].value == "")
              {
                 alert("You forgot to attach file!");
                 document.myform.elements["filefield"].focus();
                 return false;  
             }
    

    파일 확장자를 확인

      var res_field = document.myform.elements["filefield"].value;   
      var extension = res_field.substr(res_field.lastIndexOf('.') + 1).toLowerCase();
      var allowedExtensions = ['doc', 'docx', 'txt', 'pdf', 'rtf'];
      if (res_field.length > 0)
         {
              if (allowedExtensions.indexOf(extension) === -1) 
                 {
                   alert('Invalid file Format. Only ' + allowedExtensions.join(', ') + ' are allowed.');
                   return false;
                 }
        }
    

  6. 6.나는이 예제를 좋아한다 :

    나는이 예제를 좋아한다 :

    <asp:FileUpload ID="fpImages" runat="server" title="maximum file size 1 MB or less" onChange="return validateFileExtension(this)" />
    
    <script language="javascript" type="text/javascript">
        function ValidateFileUpload(Source, args) {
            var fuData = document.getElementById('<%= fpImages.ClientID %>');
            var FileUploadPath = fuData.value;
    
            if (FileUploadPath == '') {
                // There is no file selected 
                args.IsValid = false;
            }
            else {
                var Extension = FileUploadPath.substring(FileUploadPath.lastIndexOf('.') + 1).toLowerCase();
                if (Extension == "gif" || Extension == "png" || Extension == "bmp" || Extension == "jpeg") {
                    args.IsValid = true; // Valid file type
                    FileUploadPath == '';
                }
                else {
                    args.IsValid = false; // Not valid file type
                }
            }
        }
    </script>
    

  7. 7.당신은 uploadfiles을 선택하는 입력 유형 = "파일"을 사용하십니까? 그렇다면, 왜이 속성을 받아 사용하지?

    당신은 uploadfiles을 선택하는 입력 유형 = "파일"을 사용하십니까? 그렇다면, 왜이 속성을 받아 사용하지?

    <input type="file" name="myImage" accept="image/x-png,image/gif,image/jpeg" />
    

  8. 8.당신이 입력 필드에 원격 URL을 테스트 할 필요가있는 경우, 당신은 당신이에 관심이있는 종류의 간단한 정규식 테스트를 시도 할 수 있습니다.

    당신이 입력 필드에 원격 URL을 테스트 할 필요가있는 경우, 당신은 당신이에 관심이있는 종류의 간단한 정규식 테스트를 시도 할 수 있습니다.

    $input_field = $('.js-input-field-class');
    
    if ( !(/\.(gif|jpg|jpeg|tiff|png)$/i).test( $input_field.val() )) {
      $('.error-message').text('This URL is not a valid image type. Please use a url with the known image types gif, jpg, jpeg, tiff or png.');
      return false;
    }
    

    이 .gif 참고, .JPG, .JPEG, .TIFF 또는 .PNG 끝나는 아무것도 캡처

    나는 트위터 같은 일부 인기있는 사이트가 이미지의 끝 크기 속성을 추가 있음을 알아 두셔야합니다. 유효한 이미지 유형 비록 예를 들어, 다음은이 시험을 실패합니다 :

    https://pbs.twimg.com/media/BrTuXT5CUAAtkZM.jpg:large
    

    그 때문에, 이것은 완벽한 해결책이 아니다. 그러나 길의 약 90 %에 당신을 얻을 것이다.


  9. 9.(나를 위해 작품)이 시도

    (나를 위해 작품)이 시도

    검증 함수 () { var 파일은 form.file.value =; VAR 등록 번호 = /(.*?)\.(jpg|bmp|jpeg|png)$/; 만약 (!의 file.match (REG)) { 경고 ( "잘못된 파일"); false를 반환; } }


  10. 10.요즘 Array.prototype.some 통해 다른 예 ().

    요즘 Array.prototype.some 통해 다른 예 ().

    함수 isImage (아이콘) { CONST EXT = '.JPG', '.JPEG', '.BMP', '.gif 참고', '.png를', '.svg']; ext.some (엘 => icon.endsWith (EL))를 호출; } CONSOLE.LOG (isImage ( 'questions_4234589.png')); CONSOLE.LOG (isImage ( 'questions_4234589.doc'));


  11. 11.여기에 더 재사용 방법은 jQuery를 사용하는 가정입니다

    여기에 더 재사용 방법은 jQuery를 사용하는 가정입니다

    도서관 기능 (jQuery를 필요로하지 않습니다)

    function stringEndsWithValidExtension(stringToCheck, acceptableExtensionsArray, required) {
        if (required == false && stringToCheck.length == 0) { return true; }
        for (var i = 0; i < acceptableExtensionsArray.length; i++) {
            if (stringToCheck.toLowerCase().endsWith(acceptableExtensionsArray[i].toLowerCase())) { return true; }
        }
        return false;
    }
    
    
    String.prototype.startsWith = function (str) { return (this.match("^" + str) == str) }
    
    String.prototype.endsWith = function (str) { return (this.match(str + "$") == str) }
    

    페이지 기능 (jQuery를 (거의) 필요) :

    $("[id*='btnSaveForm']").click(function () {
        if (!stringEndsWithValidExtension($("[id*='fileUploader']").val(), [".png", ".jpeg", ".jpg", ".bmp"], false)) {
            alert("Photo only allows file types of PNG, JPG and BMP.");
            return false;
        }
        return true;
    });
    

  12. 12.[타이프]

    [타이프]

    uploadFileAcceptFormats: string[] = ['image/jpeg', 'image/gif', 'image/png', 'image/svg+xml'];
    
    // if you find the element type in the allowed types array, then read the file
    isAccepted = this.uploadFileAcceptFormats.find(val => {
        return val === uploadedFileType;
    });
    

  13. 13.당신은 입력 파일 형식에 사용할 수있는 동의 속성을 사용할 수 있습니다. 체크 아웃 MDN 문서

    당신은 입력 파일 형식에 사용할 수있는 동의 속성을 사용할 수 있습니다. 체크 아웃 MDN 문서


  14. 14.이것은이 JQuery와에 수행하는 방법이다

    이것은이 JQuery와에 수행하는 방법이다

    $("#artifact_form").submit(function(){
        return ["jpg", "jpeg", "bmp", "gif", "png"].includes(/[^.]+$/.exec($("#artifact_file_name").val())[0])
      });
    

  15. 15.

    <script type="text/javascript">
    
            function file_upload() {
                var imgpath = document.getElementById("<%=FileUpload1.ClientID %>").value;
                if (imgpath == "") {
                    alert("Upload your Photo...");
                    document.file.word.focus();
                    return false;
                }
                else {
                    // code to get File Extension..
    
                    var arr1 = new Array;
                    arr1 = imgpath.split("\\");
                    var len = arr1.length;
                    var img1 = arr1[len - 1];
                    var filext = img1.substring(img1.lastIndexOf(".") + 1);
                    // Checking Extension
                    if (filext == "bmp" || filext == "gif" || filext == "png" || filext == "jpg" || filext == "jpeg" ) {
                        alert("Successfully Uploaded...")
                        return false;
                    }
                    else {
                        alert("Upload Photo with Extension ' bmp , gif, png , jpg , jpeg '");
                        document.form.word.focus();
                        return false;
                    }
                }
            }
    
            function Doc_upload() {
                var imgpath = document.getElementById("<%=FileUpload2.ClientID %>").value;
                if (imgpath == "") {
                    alert("Upload Agreement...");
                    document.file.word.focus();
                    return false;
                }
                else {
                    // code to get File Extension..
    
                    var arr1 = new Array;
                    arr1 = imgpath.split("\\");
                    var len = arr1.length;
                    var img1 = arr1[len - 1];
                    var filext = img1.substring(img1.lastIndexOf(".") + 1);
                    // Checking Extension
                    if (filext == "txt" || filext == "pdf" || filext == "doc") {
                        alert("Successfully Uploaded...")
                        return false;
                    }
                    else {
                        alert("Upload File with Extension ' txt , pdf , doc '");
                        document.form.word.focus();
                        return false;
                    }
                }
            }
    </script>
    

  16. 16.VAR의 _validFileExtensions = ".png를" ".gif 중요" ".JPG", ".JPEG", ".BMP"]; 함수 ValidateSingleInput (oInput) { (oInput.type == "파일") {경우 VAR sFileName = oInput.value; 경우 (sFileName.length> 0) { VAR blnValid 거짓 =; 대 (VAR의 J = 0; J <_validFileExtensions.length, J ++) { VAR sCurExtension = _validFileExtensions [J] (- sCurExtension.length, sCurExtension.length) .toLowerCase () == sCurExtension.toLowerCase () sFileName.substr (sFileName.length) {만약 blnValid 사실 =; 단절; } } 만약 (! blnValid) { 경고 ( "죄송합니다"+ sFileName + ", 허용 확장은 무효입니다 :"+ _validFileExtensions.join ( ",")); oInput.value = ""; false를 반환; } } } true를 반환; } 파일 1 :
    파일 2 :
    파일 3 :

    VAR의 _validFileExtensions = ".png를" ".gif 중요" ".JPG", ".JPEG", ".BMP"]; 함수 ValidateSingleInput (oInput) { (oInput.type == "파일") {경우 VAR sFileName = oInput.value; 경우 (sFileName.length> 0) { VAR blnValid 거짓 =; 대 (VAR의 J = 0; J <_validFileExtensions.length, J ++) { VAR sCurExtension = _validFileExtensions [J] (- sCurExtension.length, sCurExtension.length) .toLowerCase () == sCurExtension.toLowerCase () sFileName.substr (sFileName.length) {만약 blnValid 사실 =; 단절; } } 만약 (! blnValid) { 경고 ( "죄송합니다"+ sFileName + ", 허용 확장은 무효입니다 :"+ _validFileExtensions.join ( ",")); oInput.value = ""; false를 반환; } } } true를 반환; } 파일 1 :
    파일 2 :
    파일 3 :


  17. 17.당신은 필요한 파일 형식을 포함하는 배열을 생성하고 배열에 파일 형식의 존재 여부를 확인하기 위해 jQuery를에 $ .inArray ()를 사용할 수 있습니다.

    당신은 필요한 파일 형식을 포함하는 배열을 생성하고 배열에 파일 형식의 존재 여부를 확인하기 위해 jQuery를에 $ .inArray ()를 사용할 수 있습니다.

    var imageType = ['jpeg', 'jpg', 'png', 'gif', 'bmp'];  
    
    // Given that file is a file object and file.type is string 
    // like "image/jpeg", "image/png", or "image/gif" and so on...
    
    if (-1 == $.inArray(file.type.split('/')[1], imageType)) {
      console.log('Not an image type');
    }
    

  18. 18.당신은 찾아보기 버튼 파일 확장자를 유효성을 검사 할 때,이 코드를 사용 :

    당신은 찾아보기 버튼 파일 확장자를 유효성을 검사 할 때,이 코드를 사용 :

    function fileValidate(){ 
    var docVal=document.forms[0].fileUploaded.value;
    var extension = docVal.substring(docVal.lastIndexOf(".")+1,docVal.length);
    if(extension.toLowerCase() != 'pdf')
    alert("Please enter file  in .pdf extension ");
    
    return false;
    }
    

  19. 19.우리는에 제출 확인하실 수 있습니다 또는 우리는 그 제어의 변경 이벤트를 만들 수 있습니다

    우리는에 제출 확인하실 수 있습니다 또는 우리는 그 제어의 변경 이벤트를 만들 수 있습니다

    var fileInput = document.getElementById('file');
        var filePath = fileInput.value;
        var allowedExtensions = /(\.jpeg|\.JPEG|\.gif|\.GIF|\.png|\.PNG)$/;
        if (filePath != "" && !allowedExtensions.exec(filePath)) {
        alert('Invalid file extention pleasse select another file');
        fileInput.value = '';
        return false;
        }
    

  20. 20.이렇게하여 다른 사람보다 훨씬 더 짧은 제 생각에 가장 좋은 솔루션입니다 :

    이렇게하여 다른 사람보다 훨씬 더 짧은 제 생각에 가장 좋은 솔루션입니다 :

    function OnSelect(e) {
        var acceptedFiles = [".jpg", ".jpeg", ".png", ".gif"];
        var isAcceptedImageFormat = ($.inArray(e.files[0].extension, acceptedFiles)) != -1;
    
        if (!isAcceptedImageFormat) {
            $('#warningMessage').show();
        }
        else {
            $('#warningMessage').hide();
        }
    }
    

    이 경우, 함수는이 설정을 가진 검도 업로드 컨트롤에서 호출됩니다

    .Events (E => e.Select ( "onSelect를")).

  21. from https://stackoverflow.com/questions/4234589/validation-of-file-extension-before-uploading-file by cc-by-sa and MIT license