2010-04-26 3 views
2

는 내가이 일을하고있어 파일 크기 싶어 :업로드 요청을 처리하기 전에 펄에서 파일 크기를 어떻게 얻을 수 있습니까?

my $filename=$query->param("upload_file"); 
my $filesize = (-s $filename); 
print "Size: $filesize ";` 

을 그러나 그것은 작동하지 않습니다. 파일을 업로드하지 않았습니다. 업로드하기 전에 크기를 확인하고 싶습니다. 따라서 최대 1MB로 제한하십시오.

+0

브라우저 또는 명령 줄에서 파일을 업로드하고 있습니까? – zaf

+0

아니요. – Luci

+0

답변에 약간의 혼란이있는 것 같습니다. 클라이언트가 HTTP 요청을하기 전에 파일 크기를 확인 하시겠습니까? 아니면 HTTP 요청을 확인하기 전에 HTTP 요청을 확인하고 싶습니까? 내 생각에 클라이언트가 전자를 올바르게 수행하지 못하는 경우에 대비하여 적어도 후자를해야 할 것입니다. –

답변

5

업로드하기 전에 무언가의 크기를 알 수 없습니다. 그러나 브라우저가 보낸 요청 헤더가있는 경우 Content-Length 요청 헤더를 확인할 수 있습니다. 그런 다음 믿을 지 여부를 결정할 수 있습니다. Content-Length은 파일 업로드 자체가 아닌 다른 양식 필드를 포함하여 전체 요청 스트림의 길이가됩니다. 그러나 당신을 준수하는 고객을위한 야구 경기장을 얻는 것으로 충분합니다.

일반 CGI로 실행되는 것으로 보이므로 요청 본문 길이는 $ENV{CONTENT_LENGTH}이어야합니다.

+0

'CGI.pm'에서 : if (($ POST_MAX> 0) && ($ content_length> $ POST_MAX)) {$ self-> cgi_error ("413 Request entity too large"); 마지막 방법; }' –

+0

$ ENV {CONTENT_LENGTH}이 (가) 게시 된 입력 크기를 읽는 것 같지만 파일 크기는 포함되어 있지 않습니다. 그것을 시도하고 파일 크기보다 작은 값을 반환했습니다. – Luci

-3

통계 파일 -X - perldoc.perl.orgstat-perldoc.perl.org에 대한 perl 설명서를 참조하십시오. 또한, 당신이하려고하는 것과 비슷한 일을하고있는이 upload script을 볼 수 있습니다.

+0

** 업로드하기 전에 ** 파일 크기를 확인하고 싶습니다. – Nifle

+0

예 업로드하기 전에 파일을 확인하고 싶습니다. 어떤 도움이 필요합니까? – Luci

+0

왜 부정적입니까? 사람들이 이유를 알 수 있도록 주석을 추가하는 것이 좋습니다. – Space

2

또한 아마도 이미 (perldoc CGI에서) 포스트의 최대 집합을 갖는 대해 너티 검사 할 :

음이 아닌 정수로 설정하면

$CGI::POST_MAX

는,이 변수의 크기에 상한을두고 게시 (바이트). CGI.pm이 천장보다 큰 POST를 감지하면 오류 메시지와 함께 즉시 종료됩니다. 이 값은 일반 POST와 멀티 파트 POST에 모두 영향을 미치므로 최대 파일 크기는 개로 제한됩니다. 합리적으로 높은 값 (예 : 1 메가 바이트)으로 설정해야합니다.

+0

** 업로드하기 전에 파일 크기 **를 확인하려고합니다. – Nifle

+2

@Nifle와 나는 시간 안에 여행하고 싶다. –

+0

@Sinan - 당신은 이미 당신의 Time :: Machine module을 끝내지 않았습니까? – DVK

1

이것은 Perl과 관련이 없습니다.

서버의 파일을 읽는 명령을 사용하여 사용자의 컴퓨터에서 파일의 파일 크기를 읽으려고합니다. 원하는 것은 Perl을 사용하여 수행 할 수 없습니다.

브라우저에서 수행해야하는 작업이며 these questions에서 간단히 살펴보면 매우 어렵거나 불가능합니다.

가장 좋은 방법은 사용자가 업로드를 시작하고 파일이 너무 큰 경우 중단하도록 허용하는 것입니다.

+0

파일을 읽는 중 의미 하시겠습니까? – Luci

1

요청을 처리하기 전에 확인하려면 요청을 실행하는 웹 페이지를 확인하는 것이 좋습니다. 나는 웹 브라우저가 자신 만의 기능을 수행 할 수 있다고 생각하지 않지만 플래시를 신경 쓰지 않는다면 크기 (파일 유형은 물론)를 확인하고 업로드를 막을 수있는 플래시 업로드 도구가 많이 있습니다.

먼저 좋은 것은 YUI Uploader입니다. 여기에 더 많은 내용이 있습니다. What is the best multiple file JavaScript/Flash file uploader?

분명히 서버 측에서도 확인하고 싶지만 사용자가 서버에 요청을 보내기 시작할 때까지 이미 CPU주기와 대역폭을 사용하고 있습니다.

0

답장을 보내 주셔서 감사합니다. 방금 전에 $filesize = (-s $filename);이 작동하지 않는 이유를 찾았습니다. 파일 크기를 확인하면서 Ajax 요청을 보내고 페이지를 다시 제출하지 않았기 때문입니다. 그 이유는 크기가 0 인 이유입니다. 페이지를 제출하면 문제가 해결되었습니다. 감사.

0

이 게시물을 읽는 것 뿐이지 만 content-length를 확인하는 동안 파일을 임시 폴더에 저장 한 다음 모든 종류의 검사를 수행 할 수있는 좋은 사전 검사입니다. 귀하의 기준을 충족시키지 못하면 삭제하고 최종 목적지로 보내지 마십시오.

2

업로드 된 파일은 양식을 제출할 때 서버의 tmp 위치에 숨겨져 있으므로 파일 크기를 확인하십시오.

$ field에 값을 제공하십시오.

my $upload_filehandle = $query->upload($field); 
my $tmpfilename = $query->tmpFileName($upload_filehandle); 
my $file_size = (-s $tmpfilename); 
관련 문제