web-dev-qa-db-ja.com

アップロード前にファイルサイズを確認してください

ここから入手したこのjavascriptを使用していますが、必要なものには完全に機能します。

var _validFileExtensions = [".jpg", ".jpeg"]; 

function File_Validator(theForm){
    var arrInputs = theForm.getElementsByTagName("input"); 
    for (var i = 0; i < arrInputs.length; i++) { 
    var oInput = arrInputs[i]; 
    if (oInput.type == "file") { 
        var sFileName = oInput.value; 
        var blnValid = false; 
            for (var j = 0; j < _validFileExtensions.length; j++) { 
                var sCurExtension = _validFileExtensions[j]; 
                if (sFileName.substr(sFileName.length - sCurExtension.length, sCurExtension.length).toLowerCase() == sCurExtension.toLowerCase()) { 
                    blnValid = true; 
                    break; 
                    } 
                } 

                if (!blnValid) { 
                    alert("Invalid image file type!"); 
                    return false; 
                } 
        } 
    } 

return true; 
} 

今、私はさらに、ファイルサイズを確認し、ファイルが500kbよりも大きい場合は失敗する可能性があるのではないかと思っていました->送信/アップロードボタンを押す前にすべてですか?

編集

PHPMyCoderが提案したものを調べた後、次のjavascriptコードを使用して解決します。

<script language='JavaScript'>
function checkFileSize(inputFile) {
var max =  3 * 512 * 512; // 786MB

if (inputFile.files && inputFile.files[0].size > max) {
    alert("File too large."); // Do your thing to handle the error.
    inputFile.value = null; // Clear the field.
   }
}
</script>

これにより、ファイルサイズが確認され、フォームを送信する前にユーザーに警告が表示されます。

31
cchap

クライアント側のアップロードのキャンセル

最新のブラウザー(FF> = 3.6、Chrome> = 19.0、Opera> = 12.0、およびSafariでバグあり))では、 HTML5 File API 。ファイル入力の値が変更された場合、このAPIを使用すると、ファイルサイズが要件内にあるかどうかを確認できます。もちろん、これとMAX_FILE_SIZEを改ざんすることができます常にサーバー側の検証を使用してください。

<form method="post" enctype="multipart/form-data" action="upload.php">
    <input type="file" name="file" id="file" />
    <input type="submit" name="submit" value="Submit" />
</form>

<script>
document.forms[0].addEventListener('submit', function( evt ) {
    var file = document.getElementById('file').files[0];

    if(file && file.size < 10485760) { // 10 MB (this size is in bytes)
        //Submit form        
    } else {
        //Prevent default and display error
        evt.preventDefault();
    }
}, false);
</script>

サーバー側のアップロードのキャンセル

サーバー側では、PHPが呼び出されると、アップロードが既に完了しているため、PHPからのアップロードを停止することはできません。帯域幅を節約するために、ini設定 upload_max_filesize を使用してサーバー側からのアップロードを拒否できます。これに関する問題は、すべてのアップロードに適用されるため、機能するリベラルなものを選択する必要があります。 MAX_FILE_SIZEの使用については、他の回答でも説明されています。 マニュアルを読む をお勧めします。 javascript check)、改ざんされる可能性があるため、常にサーバー側(PHP)の検証が必要です。

PHP検証

サーバー側では、ファイルがサイズ制限内にあることを検証する必要があります(INI設定が改ざんされる可能性があることを除いて、これまでのすべてが変更される可能性があるため)。 $_FILES アップロードサイズを見つける配列($_FILESの内容に関するドキュメントは、 MAX_FILE_SIZE docs の下にあります)

upload.php

<?php
if(isset($_FILES['file']) {
    if($_FILES['file']['size'] > 10485760) { //10 MB (size is also in bytes)
        // File too big
    } else {
        // File within size restrictions
    }
}
50
Bailey Parker

PhpMyCoderの答えのjQueryバージョンを作成しました:

$('form').submit(function( e ) {    
    if(!($('#file')[0].files[0].size < 10485760 && get_extension($('#file').val()) == 'jpg')) { // 10 MB (this size is in bytes)
        //Prevent default and display error
        alert("File is wrong type or over 10Mb in size!");
        e.preventDefault();
    }
});

function get_extension(filename) {
    return filename.split('.').pop().toLowerCase();
}
10
Firze