2014-06-19 4 views
1

내가 작업하고있는 웹 사이트에는 이미지를 업로드 할 수있는 옵션이 있지만 서버 측에 업로드하거나 제출하기 전에 이미지의 크기 (너비, 높이)의 유효성을 검사해야합니다. 이미지 클라이언트 측의 치수 유효화

예를 들어, 이미지, 250x250 크기해야합니다 그렇지 않으면 경고가 발생하여 사용자가 이미지를 업로드 할 수 없습니다, 여기 내 코드의 일부입니다 :

<form action="upload_file.php" method="post" enctype="multipart/form-data" name = "upload" id="insertBook" onSubmit="return validateImage();"> 
    <input type="file" name="image" value="upload" id = "myImg"> 
    <input type="submit" name = "submit">   
</form> 

validateImage 기능은 이제 단지 확장에 확인 , I 그것도 차원을 확인하고 싶습니다.

여기에 지금까지 코드입니다 :

function validateImage(){ 
    var allowedExtension = ["jpg","jpeg","gif","png","bmp"]; 
    var fileExtension = document.getElementById('myImg').value.split('.').pop().toLowerCase(); 
    var isValidFile = false; 
    for(var index in allowedExtension) { 
     if(fileExtension === allowedExtension[index]) { 
      isValidFile = true; 
      break; 
     } 
    } 
    if(!isValidFile) { 
     alert('Allowed Extensions are : *.' + allowedExtension.join(', *.')); 
    } 
    return isValidFile; 
} 

감사합니다! :)

+1

나는이 종류의 물건에 대해 개인적으로 검증을 사용하지 않을 것입니다. 서버 측은 사용자가 이미지를 보내기 전에 기능을 변경하거나 우회하지 않도록합니다. 또한 백엔드에 따라 이미지 처리시 크기를 확인할 수있는 기능이있을 수 있습니다. 이것을 달성하는 가장 효율적인 방법은 메모리로 작업하는 것입니다 (램에서). 유효성을 검사하면 디스크에 이미지를 쓰거나 그렇지 않은 경우 이미지를 버리십시오. 물론 업로드하기 전에 크기를 확인할 수 있습니다. 안전하지 않은가. 서버 측에서 확인하십시오. – Depado

+1

@Depado 클라이언트 측 유효성 검사는 사용자 편의를위한 것이며 클라이언트 측 확인 및 오류보고를 선호합니다. 나는 서버 쪽을 믿는다 유효하지 않으면 요청을 확인하고 버려야하며 클라이언트 쪽의 오류 메시지를 표시하는 모든 불쾌한 UI 요소는 그대로 두어야한다. –

+1

@ImanMohamadi이 시점에서 맞습니다. 클라이언트 측 유효성 검사는 UI 관련 사항 일뿐입니다. 이런 종류의 일에 대해서는 클라이언트 측에 의존해서는 안됩니다. 그래서 그것이 안전하지 않다고 말합니다. 항상 서버 쪽 유효성 검사를 먼저 수행 한 다음 클라이언트 쪽 인증을 수행하십시오. 그렇지 않으면 클라이언트 측의 프로세스가 안전하다고 생각할 수 있습니다. 클라이언트 측 유효성 검사는 항상 optionnal입니다. 물론 그것은 서버에 대한 몇 가지 나쁜 요청을 저장할 수 있습니다. 그러나 누군가 이미지를 업로드하고 싶다면 그냥 무시할 수 있습니다. – Depado

답변

3
function validateImage(){ 
    var isValidFile = false; 
    var image = document.getElementById('myImg'); 

    var allowedExtension = ["jpg","jpeg","gif","png","bmp"]; 

    var srcChunks = image.src.split('.'); 
    var fileExtension = srcChunks[ srcChunks.length - 1 ].toLowerCase(); 

    if (image.width !== image.height !== 250) { 
     console.log('Size check failed'); 
     return false; 
    } 

    for(var index in allowedExtension) { 
     if(fileExtension === allowedExtension[index]) { 
      isValidFile = true; 
      break; 
     } 
    } 

    if(!isValidFile) { 
     alert('Allowed Extensions are : *.' + allowedExtension.join(', *.')); 
    } 

    return isValidFile; 
} 
+0

을 IT 감사합니다 일했다 나는 그 선이 = image.src.split을 "var에 srcChunks 무엇을 요청할 수 있습니다 ('.');?를 var에 fileExtension = srcChunks [srcChunks합니다. 길이 - 1]." @Ingmars –

+1

환영합니다 :) – Ingmars

+2

그는 구분 기호로". "을 사용하여 파일 이름을 분할하고 마지막 파일을 사용하므로 실제로 확장자가됩니다. 예를 들어 'hello'라는 파일이 있습니다. world.jpg '. 그의 코드는'jpg '만 사용합니다. for 루프가 확장의 존재를 확인하는 방법은 이제 indexOf 메소드로 대체해야합니다. – Depado

1

Related to this topic

내 의견에 말했듯이, 당신은 클라이언트 측의 크기를 확인할 수 있지만 자바 스크립트가 우회 될 수 있으므로 안전하지 않은, 그리고 당신의 유효성 검사가 어떠한 목적도 수행하지 않습니다. 누군가 5Go 파일을 정말로 업로드하고 싶다면 체크 기능을 재정의해야합니다.

클라이언트에서 서버 쪽 유효성 검사에 액세스 할 수 없습니다. 또한 백엔드 및 이미지 처리 (단순한 파일처럼 취급하고 있습니까, 아니면 이미지로 작업 할 수있는 lib가 있습니까?)에 따라 이미지 크기에 도움이되는 몇 가지 방법을 찾을 수 있습니다. 예를 들어 파이썬에서는 이미지 정보, 크기, 치수, 내용을 확인하기 위해 PIL (3.x 버전의 베개)을 사용합니다. 실제 파일인지 아닌지를 확인합니다. 실제로는 일부 파일이 포함 된 손상된 파일을 업로드하는 것이 쉽습니다 PHP 코드 (예 :)를 사용하여 사용자가 서버에 컨텐츠를 업로드 할 때 매우주의해야합니다.

+0

답변 해 주셔서 감사합니다. 그러나 대부분의 대답에 대한 문제는 jQuery를 사용하고 아직 사용할 수 없다는 것입니다. 슬프게도 배울 시간이 없습니다. : –

+1

관련 주제를 확인하십시오. 그는 이미지 정보를 얻기 위해 JQuery를 사용하지 않고 DOM을 수정하기 위해 JQuery를 사용하고 있습니다. 최신 브라우저에서 정보를 얻으려면 JQuery가 필요하지 않습니다. .!에게 오래된 브라우저, juste 서버 측의 유효성을 확인 – Depado

관련 문제