2015-01-21 1 views
0

매우 흥미로운 문제가 발생했습니다. 우리는 아파치에서 Nginx로 전환했고, 우리는 Nginx에 문제가있는 파일 업로드 기능을 가지고 있습니다. 업로드 할 파일이 너무 큰 경우, 오류 메시지가 표시됩니다 : 너무 큰Opera Mini에서 대용량 파일 업로드 방지

413 요청 엔티티

의 nginx/1.4.6 (우분투)

이입니다 우리는 파일 크기에 제한이 있기 때문에 서버에서 2MB보다 큰 파일을 허용하지 않습니다. 그러나 이는 사용자 친화적 인 오류가 아니므로 기술적 인 세부 사항을 숨기고 사용자에게 친숙한 방식으로 사용자에게 알리고 자했습니다. Opera Mini를 제외한 모든 브라우저에서 작동하는 기능을 구현했습니다. 브라우저가 submit 이벤트가 항상 false 될 것 안에 다음하여 form 항상 제출 될 경우, 오페라 미니입니다

if (isOperaMini()) { 
    $("#opera-mini-photo-form").submit(function(e) { 
     if (document.getElementById("opera-input").files[0].size >= 1048576) { 
      e.preventDefault(); 
      alert"Invalid or too large file"); 
     } 
    }); 
} else { 
    //some code for other browsers 
} 

경우가 질문에 관련이없는 때문에, 그것에서 일부 세부 사항을 취할 것입니다. 다른 브라우저에서 Opera Mini 용으로 작성된 코드를 검토하여 잘못 구현되었는지 확인합니다. 다른 브라우저에서는 작동했습니다. Opera Mini에서 다음과 같은 가치를 경고하려고했습니다.

document.getElementById("opera-input").files[0].size 

alert이 발생하지 않았습니다. 이제 오페라 미니가 오페라 프록시를 사용하여 웹을 탐색한다는 사실을 계정에 반영하면 Javascript가 실제로 프록시 서버에서 실행 중인지 궁금합니다. 이 경우 파일 크기를 확인할 수없는 이유가 설명됩니다. 그렇지 않다면 어떤 문제가 발생할 수 있는지 알 수 없습니다.

document.getElementById("opera-input").files[0].size 

대신 파일의 크기를 확인해야합니까?

답변

1

document.getElementById("opera-input").files은 File API입니다.

파일 API는 Opera Mini에서 not enabled입니다.

간단한 fiddle을 확인하십시오.

서버의 파일 크기를 확인하고 파일 크기에 대한 오류를 응답 html에 추가하는 것이 좋습니다.

+0

아주 좋은 대답이지만, 파일이 너무 커서 요청이 소스 코드에 도달하지 않으면 서버는 403으로 응답합니다. 즉, 서버 설정을 변경하지 않으면 답변을 찾을 수 없으므로 해결책이 없습니다. 서버 설정을 변경하지 않고 이것이 가능하지 않다는 것을 확인하면 대답을 수락합니다. 대안이 있습니까? –

+0

서버 한도를 업데이트하고 서버별로 크기를 확인하거나 413 오류 페이지를 사용자 정의하고 큰 파일 크기에 대한 정보를 추가해야합니다. – Pinal