JQuery দিয়ে ফাইল ইনপুট আকার কীভাবে চেক করবেন?


135

ফাইল আপলোড করার ক্ষমতা সহ আমার একটি ফর্ম রয়েছে এবং ব্যবহারকারী যদি আপলোড করার চেষ্টা করছেন ফাইলটি খুব বড়, jQuery এর সাথে ফাইলের আকারের বিরুদ্ধে পরীক্ষা করার উপায় আছে, তবে খালি খাঁটিভাবে ক্লায়েন্ট সাইডের ত্রুটির প্রতিবেদন করতে সক্ষম হতে চাই ক্লায়েন্টে বা কোনওভাবে ফাইলটি পোস্ট করে সার্ভারে চেক করার জন্য?

উত্তর:


275

আপনার কাছে আসলে ফাইল সিস্টেমে অ্যাক্সেস নেই (উদাহরণস্বরূপ স্থানীয় ফাইলগুলি পড়া এবং লেখার জন্য) তবে HTML5 ফাইল এপি স্পেসিফিকেশনের কারণে এমন কিছু ফাইল বৈশিষ্ট্য রয়েছে যা আপনার অ্যাক্সেস করে এবং ফাইল আকারটি এর মধ্যে একটি।

নীচে এইচটিএমএল জন্য

<input type="file" id="myFile" />

নিম্নলিখিত চেষ্টা করুন:

//binds to onchange event of your input field
$('#myFile').bind('change', function() {

  //this.files[0].size gets the size of your file.
  alert(this.files[0].size);

});

এটি HTML5 স্পেসিফিকেশনের একটি অংশ হিসাবে এটি কেবলমাত্র আধুনিক ব্রাউজারগুলির জন্য কাজ করবে (IE এর জন্য প্রয়োজনীয় v10) এবং আমি এখানে জানাতে হবে এমন অন্যান্য ফাইল তথ্য সম্পর্কে আরও বিশদ এবং লিঙ্কগুলি যুক্ত করেছি : http://felipe.sabino.me/javascript / 2012/01/30 / javascipt-পরীক্ষণ-ফাইল-আকার /


পুরানো ব্রাউজারগুলি সমর্থন করে

সচেতন থাকুন যে পুরানো ব্রাউজারগুলি nullপূর্ববর্তী this.filesকলটির জন্য একটি মান ফিরিয়ে দেবে , সুতরাং অ্যাক্সেস করা this.files[0]একটি ব্যতিক্রম বাড়িয়ে তুলবে এবং এটি ব্যবহারের আগে আপনার ফাইল এপিআই সমর্থনটি পরীক্ষা করা উচিত


6
সবাই বলে যে এটি করা যায় না - তবুও এটি এখানে। এইটা কাজ করে. আমি এটি পরীক্ষা করেছি।
পিটার

35
@ জিরোইন আমি একমত যে আই আই এর জন্য কাজ না করা এটিকে অনেক লোকের জন্য আদর্শ সমাধান হিসাবে বিবেচনা করে না, তবে একটি ভোট-দেওয়া হচ্ছে না এবং উত্তরটি কিছুটা নিরর্থক বলে কি বলা হচ্ছে না? আমি এই সমাধানটি একটি দুর্দান্ত বিভিন্ন এন্টারপ্রাইজ ওয়েব সলিউশনে ব্যবহার করেছি যা কেবল ক্রোম এবং / অথবা ফায়ারফক্সে কাজ করার সুযোগ ছিল এবং এই সমাধানটির সন্ধানকারী কিছু লোক একই স্থানে থাকতে পারে, সুতরাং এই সমাধানটি যথেষ্ট ভাল হবে ।
ফিলিপ সাবিনো

3
আমি গুগলে এই উত্তরটি পেরিয়ে এসেছি এবং ব্যবহারকারীদের নির্দিষ্ট আকারের চেয়ে বেশি ফাইল পোস্ট করা বন্ধ করতে এটি ব্যবহার করতে যাচ্ছি; আমি যেমন সার্ভার সাইডে ফাইলের আকারগুলিও যাচাই করি আমি ক্লায়েন্ট-সাইড সলিউশনটি পেয়ে খুশি যা আইই 8 তে কাজ করে না।
স্টিভ উইলকস

2
@ গওলাইপ্যাং এই ত্রুটিটি সম্ভবত jQueryজাভাস্ক্রিপ্ট ফাইলটি যুক্ত না হওয়ার কারণে হয়েছে (বা এটি সঠিকভাবে লোড করা হয়নি)। আপনি কি এটি headআপনার পৃষ্ঠায় যুক্ত করেছেন?
ফিলিপ সাবিনো

1
@ ভলিউমোন এজন্যই আমি বলেছিলাম যে আমার উত্তরে আপনার "ফাইল এপিআই সমর্থন ব্যবহারের আগে পরীক্ষা করা উচিত" এবং তারপরে আপনি ইউআই পরিবর্তন করতে পারেন।
ফিলিপ সাবিনো

41

আপনি যদি jQuery এর ব্যবহার করতে চান তবে validateএই পদ্ধতিটি তৈরি করে আপনি পারেন:

$.validator.addMethod('filesize', function(value, element, param) {
    // param = size (en bytes) 
    // element = element to validate (<input>)
    // value = value of the element (file name)
    return this.optional(element) || (element.files[0].size <= param) 
});

আপনি এটি ব্যবহার করবেন:

$('#formid').validate({
    rules: { inputimage: { required: true, accept: "png|jpe?g|gif", filesize: 1048576  }},
    messages: { inputimage: "File must be JPG, GIF or PNG, less than 1MB" }
});

1
@ ড্যান হ্যাঁ, ফাইল আকারের সম্পত্তিটি এইচটিএমএল 5 স্পেসিফিকেশনের একটি অংশ, তাই এটি কেবলমাত্র আধুনিক ব্রাউজারগুলির জন্যই কাজ করবে (IE এর জন্য এটি সংস্করণ 10+ হবে)
ফিলিপ সাবিনো

7
আপনি acceptনিয়মটি ভুলভাবে ব্যবহার করেছেন , যেখানে আপনার extensionনিয়মটি ব্যবহার করা উচিত ছিল । ~ নিয়ম শুধুমাত্র MIME প্রকারসমূহ জন্য। নিয়ম ফাইল এক্সটেনশন জন্য। এই বিধিগুলির জন্য আপনাকে ফাইল অন্তর্ভুক্ত করতে হবেacceptextensionadditional-methods.js
স্পার্কি

@ স্পার্কির $('#formid').validate({ rules: { inputimage: { required: true, extension: "png|jpe?g|gif", filesize: 1048576 }}, messages: { inputimage: "File must be JPG, GIF or PNG, less than 1MB" } });
দৃser়

26

এই কোড:

$("#yourFileInput")[0].files[0].size;

একটি ফর্ম ইনপুট জন্য ফাইলের আকার ফেরত দেয়।

এফএফ 3.6 এ এবং পরে এই কোডটি হওয়া উচিত:

$("#yourFileInput")[0].files[0].fileSize;

2
আপনার প্রথম কোডটি ক্রোমে কাজ করে তবে দ্বিতীয়টি ফায়ারফক্সের সর্বশেষে কাজ করে না।
ডেবিরা

সেই দ্বিতীয় কোডটি হ'ল আমাকে সমস্ত আধুনিক (2014+ ব্রাউজার) এর জন্য ব্যবহার করতে হয়েছিল।
ড্রিমকাস্টিং

1
প্রথম কোডটি আইই 10, 11, এজ, ক্রোম, সাফারি (উইন্ডোজ সংস্করণ), সাহসী এবং ফায়ারফক্স কাজ করে।
মাশুকুর রহমান

12

আমি আমার সমাধানও পোস্ট করছি, এটি একটি এএসপি.এনইটি FileUploadনিয়ন্ত্রণের জন্য ব্যবহৃত । সম্ভবত কেউ এটি দরকারী খুঁজে পাবেন।

    $(function () {        
    $('<%= fileUploadCV.ClientID %>').change(function () {

        //because this is single file upload I use only first index
        var f = this.files[0]

        //here I CHECK if the FILE SIZE is bigger than 8 MB (numbers below are in bytes)
        if (f.size > 8388608 || f.fileSize > 8388608)
        {
           //show an alert to the user
           alert("Allowed file size exceeded. (Max. 8 MB)")

           //reset file upload control
           this.value = null;
        }
    })
});

1
আপনার মানটি বাতিল f = this.files[0]করতে হবে বা এটি পুরানো ব্রাউজারগুলিতে ব্যর্থ হবে। যেমনif (f && (f.size > 8388608 || f.fileSize > 8388608))
কোডিং হয়ে গেছে

9

ফাইলের আকার পরীক্ষা করতে নীচে ব্যবহার করুন এবং এটি আরও বড় হলে সাফ করুন,

    $("input[type='file']").on("change", function () {
     if(this.files[0].size > 2000000) {
       alert("Please upload file less than 2MB. Thanks!!");
       $(this).val('');
     }
    });

1
$ (এটি) .ভাল (নাল) ব্যবহার করা উচিত; অন্যথায় সঠিক সংযুক্তি নির্বাচন না করে ফর্মটি আর সঠিকভাবে জমা দেওয়ার মতো মনে হচ্ছে না।
কেভিন গ্র্যাবার

1

আপনি ফ্ল্যাশ বা সিলভারলাইট দিয়ে জাভাস্ক্রিপ্ট নয় এই ধরণের চেকিং করতে পারেন। জাভাস্ক্রিপ্ট স্যান্ডবক্স ফাইল সিস্টেমে অ্যাক্সেসের অনুমতি দেয় না। আকার চেকটি আপলোড হওয়ার পরে সার্ভারের পাশে করা দরকার।

আপনি যদি সিলভারলাইট / ফ্ল্যাশ রুটে যেতে চান তবে আপনি পরীক্ষা করতে পারেন যে তারা নিয়মিত ফাইল আপলোড হ্যান্ডলারের সাথে সাধারণ নিয়ন্ত্রণ ব্যবহার করে ডিফল্টরূপে ইনস্টল না করা আছে। এইভাবে, যদি সিলভারলাইট / ফ্ল্যাশ ইনস্টল থাকে তবে তাদের অভিজ্ঞতাটি আরও কিছুটা সমৃদ্ধ হবে।


1
<form id="uploadForm" class="disp-inline" role="form" action="" method="post" enctype="multipart/form-data">
    <input type="file" name="file" id="file">
</form>
<button onclick="checkSize();"></button>
<script>
    function checkSize(){
        var size = $('#uploadForm')["0"].firstChild.files["0"].size;
        console.log(size);
    }
</script>

আমি স্ট্যান্ডার্ড এজাক্স / এইচটিএমএল 5 পদ্ধতির মাধ্যমে ফর্মটি জমা দেওয়ার পরিকল্পনা না করলে এটি সবচেয়ে সহজ বলে আমি খুঁজে পেয়েছি তবে অবশ্যই এটি কোনও কিছুর সাথেই কাজ করে।

মন্তব্য:

var size = $('#uploadForm')["0"]["0"].files["0"].size;

এটি কাজ করত, তবে এটি ক্রোমে আর হয় না, আমি কেবল উপরের কোডটি পরীক্ষা করেছি এবং এটি এফএফ এবং ক্রোম (সর্বশেষতম) উভয় ক্ষেত্রেই কাজ করে। দ্বিতীয় ["0"] এখন প্রথম শিশু h


0

দয়া করে এটি চেষ্টা করুন:

var sizeInKB = input.files[0].size/1024; //Normally files are in bytes but for KB divide by 1024 and so on
var sizeLimit= 30;

if (sizeInKB >= sizeLimit) {
    alert("Max file size 30KB");
    return false;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.