2014-07-20 1 views
2

PHP로 업로드 기능을 만들고 있습니다. 정상적으로 작동합니다. PHP phi ini 파일의 최대 크기가 32MB이기 때문에 그보다 큰 것을 업로드 할 수 없습니다. 그리고 그건 나에게 좋다.업로드 된 여러 파일의 합친 크기 표시

하지만 :
은 내가 이 32메가바이트 이상, 입력 파일에 추가되는 모든 파일의 크기을 결합하면 업로드를 방지합니다.

나는 시작되는 파일을 추가 한 후 파일 크기를 경고이 스크립트 발견

$(function(){ 
    $('#file').change(function(){ 
     var file=this.files[0] 
     alert(file.size||file.fileSize) 
    }) 
}) 

을하지만 테스트 할 때 나는 단지 파일의 크기를 반환하는 것을 알아 냈다. 입력 필드에 추가 된 모든 파일을 반환하도록이 코드를 어떻게 변경할 수 있습니까? 아니면 다른 방법이 있습니까?

HTML :

<!doctype html> 
<html> 
<head> 
<meta charset="UTF-8"> 
<title>Tutorial</title> 

<link rel="stylesheet" type="text/css" href="css/tut.css"> 
<script src="http://code.jquery.com/jquery-latest.min.js"></script> 
<script src="js/script.js"></script> 
</head> 

<body> 

<form action="tutorial.php" method="POST" enctype="multipart/form-data"> 
    <!--<input type="file" name="myFile"><p> 
    <input type="submit" value="Upload"> 
    <br/><br/>--> 
    <input type="file" name="files[]" multiple="multiple" id="file"/><p> 
    <input type="submit" value="Upload" id="submit" /> 
</form> 

</div> 

</body> 
</html> 

PHP 코드 :

$file_dest = "photos/orig/"; 
$thumb_dest = "photos/thumbs/"; 

if(!empty($_FILES['files']['name'][0])){ 

    $files = $_FILES['files']; 

    $uploaded = array(); 
    $failed = array(); 

    $allowedExt = array('png', 'jpg', 'gif'); 

    foreach($files['name'] as $position => $file_name) { 
     $file_tmp = $files['tmp_name'][$position]; 
     $file_size = $files['size'][$position]; 
     $file_error = $files['error'][$position]; 

     $file_ext = explode('.', $file_name); 
     $file_ext = strtolower(end($file_ext)); 

     if(in_array($file_ext, $allowedExt)){ 

      if($file_error == 0){ 

       if($file_size <= 20000000){ 

        $file_name_new = uniqid('', true)."_".$file_name; 
        $file_move = $file_dest.$file_name_new; 

        if(move_uploaded_file($file_tmp, $file_move)){ 
         $uploaded[$position] = $file_dest; 

        }else{ 
         $failed[$position] = "[{$file_name}] failed to upload."; 
        } 

       }else{ 
        $failed[$position] = "[{$file_name}] is too large."; 
       } 

      }else{ 
       $failed[$position] = "[P$file_name}] errored with code {$file_error}"; 
      } 

     }else{ 
      $failed[$position] = "[{$file_name}] file extension '{$file_ext}' is not allowed."; 
     } 
    } 

    if(!empty($uploaded)){ 
     print_r($uploaded); 
    } 

    if(!empty($failed)){ 
     print_r($failed); 
    } 
}else{ 
    echo "No files were added."; 
} 

(!) 참고 : 코드는 여전히 보안 조치를 추가 할 필요가 아직 완료되지입니다. 그 부족을 무시하십시오.

답변

2
$(function(){ 
    $('#file').change(function(){ 
     var combinedSize = 0; 
     for(var i=0;i<this.files.length;i++) { 
      combinedSize += (this.files[i].size||this.files[i].fileSize); 
     } 
     alert(combinedSize); 
    }) 
}) 
3

당신은 할 거라고 그 크기

$(function(){ 
    $('#file').on('change', function(){ 
     var total = [].slice.call(this.files).map(function(x) { 
      return x.size || x.fileSize; 
     }).reduce(function(a, b) { return a + b; }, 0); 

     if (total > 33554432) { 
      alert('Total size exceeds 32 mb'); 
     } 

    }); 
}); 

FIDDLE

를 합산하여
관련 문제