जावास्क्रिप्ट फ़ाइल अपलोड आकार सत्यापन


254

जावास्क्रिप्ट का उपयोग करके अपलोड करने से पहले फ़ाइल का आकार जांचने का कोई तरीका है ?

जवाबों:


327

हां , W3C की एक नई विशेषता है जो कुछ आधुनिक ब्राउज़र, फ़ाइल एपीआई द्वारा समर्थित है । यह इस उद्देश्य के लिए इस्तेमाल किया जा सकता है, और यह परीक्षण करना आसान है कि क्या यह समर्थित है और यदि यह नहीं है तो किसी अन्य तंत्र पर वापस गिर (यदि आवश्यक हो)।

यहाँ एक पूर्ण उदाहरण है:

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
<title>Show File Data</title>
<style type='text/css'>
body {
    font-family: sans-serif;
}
</style>
<script type='text/javascript'>
function showFileSize() {
    var input, file;

    // (Can't use `typeof FileReader === "function"` because apparently
    // it comes back as "object" on some browsers. So just see if it's there
    // at all.)
    if (!window.FileReader) {
        bodyAppend("p", "The file API isn't supported on this browser yet.");
        return;
    }

    input = document.getElementById('fileinput');
    if (!input) {
        bodyAppend("p", "Um, couldn't find the fileinput element.");
    }
    else if (!input.files) {
        bodyAppend("p", "This browser doesn't seem to support the `files` property of file inputs.");
    }
    else if (!input.files[0]) {
        bodyAppend("p", "Please select a file before clicking 'Load'");
    }
    else {
        file = input.files[0];
        bodyAppend("p", "File " + file.name + " is " + file.size + " bytes in size");
    }
}

function bodyAppend(tagName, innerHTML) {
    var elm;

    elm = document.createElement(tagName);
    elm.innerHTML = innerHTML;
    document.body.appendChild(elm);
}
</script>
</head>
<body>
<form action='#' onsubmit="return false;">
<input type='file' id='fileinput'>
<input type='button' id='btnLoad' value='Load' onclick='showFileSize();'>
</form>
</body>
</html>

और यहाँ यह कार्रवाई में है। कोशिश करें कि क्रोम या फ़ायरफ़ॉक्स के हालिया संस्करण के साथ।


थोड़ा-सा विषय, लेकिन: ध्यान दें कि क्लाइंट-साइड सत्यापन सर्वर-साइड सत्यापन के लिए कोई विकल्प नहीं है । क्लाइंट-साइड सत्यापन शुद्ध रूप से एक अच्छे उपयोगकर्ता अनुभव प्रदान करना संभव बनाता है। उदाहरण के लिए, यदि आप किसी फ़ाइल को 5MB से अधिक अपलोड करने की अनुमति नहीं देते हैं, तो आप यह जाँचने के लिए क्लाइंट-साइड सत्यापन का उपयोग कर सकते हैं कि उपयोगकर्ता ने जो फ़ाइल चुनी है, वह 5MB से अधिक आकार की नहीं है और यदि है तो उसे एक अच्छा मित्र संदेश दें (इसलिए वे सारा समय केवल सर्वर पर फेंके गए परिणाम को प्राप्त करने के लिए अपलोड करने में खर्च नहीं करते), लेकिन आपको सर्वर पर उस सीमा को भी लागू करना होगा , क्योंकि सभी क्लाइंट-साइड सीमाएँ (और अन्य सत्यापन) को दरकिनार किया जा सकता है।


12
+1 के लिए "सभी क्लाइंट-साइड सीमाएं (और अन्य सत्यापन) को दरकिनार किया जा सकता है"। यह "देशी" / "संकलित" डेटाबेस फ्रंटएंड अनुप्रयोगों के लिए सही है। और डेटाबेस संकलित पासवर्ड को अपने संकलित कोड में न डालें, यहां तक ​​कि "एन्क्रिप्टेड" भी नहीं है (एक पासवर्ड जो कोड में भी है - बस हाल ही में यह देखा है)।
मास्टरएक्सिलो

117

Jquery का उपयोग करना:

<form action="upload" enctype="multipart/form-data" method="post">

    Upload image:
    <input id="image-file" type="file" name="file" />
    <input type="submit" value="Upload" />

    <script type="text/javascript">
        $('#image-file').bind('change', function() {
            alert('This file size is: ' + this.files[0].size/1024/1024 + "MB");
        });
    </script>

</form>

2
@ आईईपी, आईई 8 फॉलबैक का कोई मौका? (मैं भी IE का उल्लेख करने के लिए खुद से नफरत कर रहा हूँ)
अशर

2
यह एक काम करता है लेकिन यह कई फाइलों के लिए भी काम करता है?
इनगस

4
यह होना चाहिए MiBयदि आप के आधार की गणना करते हैं 1024
slartidan

69

गतिशील और स्थैतिक फ़ाइल तत्व के लिए काम करता है

जावास्क्रिप्ट केवल समाधान

function ValidateSize(file) {
        var FileSize = file.files[0].size / 1024 / 1024; // in MB
        if (FileSize > 2) {
            alert('File size exceeds 2 MB');
           // $(file).val(''); //for clearing with Jquery
        } else {

        }
    }
 <input onchange="ValidateSize(this)" type="file">


1
अच्छा उत्तर। मुझे भी यही समस्या हो रही थी लेकिन आपके समाधान ने मेरे लिए काम किया :)
दीपंकर दास

1
NB OP ने पोस्ट को संपादित किया इसलिए sizeसंपत्ति का उपयोग करते हुए कोड अब सही है
UsAndRufus

1
जवाब के लिए धन्यवाद मैं लगभग एक ही कर रहा था लेकिन एक बदलाव के साथ। $(obj).files[0].size/1024/1024; लेकिन इसे बदल दियाobj.files[0].size/1024/1024;
शाकिर बाबा

क्या चौड़ाई और ऊंचाई सत्यापन के लिए इसे बढ़ाने का कोई तरीका है? (प्रारंभिक बिंदु के रूप में एक "फाइल" छोड़ना और यह मान लेना कि वह एक छवि को संदर्भित करता है)
jlmontesdeoca

@jlmontesdeoca मुझे लगता है कि आप फ़ाइल को कैनवस की मदद से पढ़ सकते हैं और इसे यहां ऊंचाई और चौड़ाई प्राप्त कर सकते हैं।
अरुण प्रसाद ES

14

नहीं , नए ब्राउज़र में फ़ाइल एपीआई का उपयोग करते हुए। विवरण के लिए टीजे का जवाब देखें।

यदि आपको पुराने ब्राउज़रों का समर्थन करने की आवश्यकता है, तो आपको ऐसा करने के लिए SWFUpload या Uploadify जैसे फ्लैश-आधारित अपलोडर का उपयोग करना होगा।

SWFUpload सुविधाएँ डेमो शो कैसे file_size_limitसेटिंग काम करता है।

ध्यान दें कि यह (स्पष्ट रूप से) फ्लैश की आवश्यकता है, साथ ही यह जिस तरह से काम करता है वह सामान्य अपलोड रूपों से थोड़ा अलग है।


14

यह बहुत आसान है।

            var oFile = document.getElementById("fileUpload").files[0]; // <input type="file" id="fileUpload" accept=".jpg,.png,.gif,.jpeg"/>

            if (oFile.size > 2097152) // 2 mb for bytes.
            {
                alert("File size must under 2mb!");
                return;
            }

सबसे बढ़िया उत्तर। मीठा और सरल ... :)
ए। सिन्हा

12

यदि आप jQuery सत्यापन का उपयोग कर रहे हैं, तो आप कुछ इस तरह लिख सकते हैं:

$.validator.addMethod(
    "maxfilesize",
    function (value, element) {
        if (this.optional(element) || ! element.files || ! element.files[0]) {
            return true;
        } else {
            return element.files[0].size <= 1024 * 1024 * 2;
        }
    },
    'The file size can not exceed 2MB.'
);

4

मैंने कुछ इस तरह बनाया:

$('#image-file').on('change', function() {
 var numb = $(this)[0].files[0].size/1024/1024;
numb = numb.toFixed(2);
if(numb > 2){
alert('to big, maximum is 2MB. You file size is: ' + numb +' MB');
} else {
alert('it okey, your file has ' + numb + 'MB')
}
        });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<input type="file" id="image-file">


इसे जावास्क्रिप्ट कहते हैं, JQuery टैग में नहीं है
हैलो 234

3

मैं एक मुख्य जावास्क्रिप्ट फ़ंक्शन का उपयोग करता हूं जो मुझे मोज़िला डेवलपर नेटवर्क साइट https://developer.mozilla.org/en-US/docs/Using_files_from_web_applications , AJAX के साथ एक अन्य फ़ंक्शन के साथ मिला और मेरी ज़रूरतों के अनुसार बदल गया। यह मेरे html कोड में उस जगह के बारे में एक डॉक्यूमेंट एलिमेंट आईडी प्राप्त करता है, जहाँ मैं फ़ाइल साइज़ लिखना चाहता हूँ।

<Javascript>

function updateSize(elementId) {
    var nBytes = 0,
    oFiles = document.getElementById(elementId).files,
    nFiles = oFiles.length;

    for (var nFileId = 0; nFileId < nFiles; nFileId++) {
        nBytes += oFiles[nFileId].size;
    }
    var sOutput = nBytes + " bytes";
    // optional code for multiples approximation
    for (var aMultiples = ["K", "M", "G", "T", "P", "E", "Z", "Y"], nMultiple = 0, nApprox = nBytes / 1024; nApprox > 1; nApprox /= 1024, nMultiple++) {
        sOutput = " (" + nApprox.toFixed(3) + aMultiples[nMultiple] + ")";
    }

    return sOutput;
}
</Javascript>

<HTML>
<input type="file" id="inputFileUpload" onchange="uploadFuncWithAJAX(this.value);" size="25">
</HTML>

<Javascript with XMLHttpRequest>
document.getElementById('spanFileSizeText').innerHTML=updateSize("inputFileUpload");
</XMLHttpRequest>

चियर्स


3

हालांकि इस सवाल का जवाब है, मैं अपना जवाब पोस्ट करना चाहता था। भविष्य के दर्शकों के लिए काम आ सकता है। आप इसे निम्नलिखित कोड की तरह उपयोग कर सकते हैं।

<input type="file" id="fileinput" />
<script type="text/javascript">
  function readSingleFile(evt) {
    //Retrieve the first (and only!) File from the FileList object
    var f = evt.target.files[0]; 
    if (f) {
      var r = new FileReader();
      r.onload = function(e) { 
          var contents = e.target.result;
        alert( "Got the file.n" 
              +"name: " + f.name + "n"
              +"type: " + f.type + "n"
              +"size: " + f.size + " bytesn"
              + "starts with: " + contents.substr(1, contents.indexOf("n"))
        ); 
        if(f.size > 5242880) {
               alert('File size Greater then 5MB!');
                }


      }
      r.readAsText(f);
    } else { 
      alert("Failed to load file");
    }
  }

3

इस धागे में प्रदान किया गया JQuery का उदाहरण बहुत पुराना था, और Google मेरे लिए बिल्कुल भी मददगार नहीं था

 <script type="text/javascript">
        $('#image-file').on('change', function() {
            console.log($(this)[0].files[0].name+' file size is: ' + $(this)[0].files[0].size/1024/1024 + 'Mb');
        });
    </script>

1

आप इस लूपअप लोडर को आजमा सकते हैं

यह IE6 (और ऊपर), क्रोम या फ़ायरफ़ॉक्स के तहत ठीक काम करता है


3
ठीक अपलोडर IE9 में फ़ाइल आकार को मान्य करने में सक्षम नहीं है और पुराने जैसा कि फ़ाइल API का समर्थन नहीं करता है समर्थित नहीं है। IE10 इंटरनेट एक्सप्लोरर का पहला संस्करण है जो फ़ाइल एपीआई का समर्थन करता है।
रे निकोलस

-2

यदि आप I 'दस्तावेज़ मोड' को 'मानक' पर सेट करते हैं, तो आप अपलोड की गई फ़ाइल का आकार प्राप्त करने के लिए सरल जावास्क्रिप्ट 'आकार' विधि का उपयोग कर सकते हैं।

I 'दस्तावेज़ मोड' को 'मानक' पर सेट करें:

<meta http-equiv="X-UA-Compatible" content="IE=Edge">

अपलोड की गई फ़ाइल का आकार पाने के लिए 'आकार' जावास्क्रिप्ट विधि का उपयोग करें:

<script type="text/javascript">
    var uploadedFile = document.getElementById('imageUpload');
    var fileSize = uploadedFile.files[0].size;
    alert(fileSize); 
</script>

इससे मेरा काम बनता है।


1
यह IE9 या पुराने में काम नहीं करेगा, इससे कोई फर्क नहीं पड़ता कि आप क्या मेटा टैग जोड़ते हैं।
रे निकोलस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.