আপলোড করার আগে ফাইলের আকার পান


91

ইনপুট ফাইলের পরিবর্তনের ইভেন্টে এজ্যাক্স / পিএইচপি ব্যবহার করে ফাইল আপলোড করার আগে ফাইলের আকার খুঁজে পাওয়ার কোনও উপায় আছে কি?




ফাইলের নাম, টাইপ এবং আকার কোডিপিডিয়া.আইএনপিও
সতিন্দর সিংহ

উত্তর:


134

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

<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);

});

নিম্নলিখিত থ্রেড দেখুন:

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


4
ইন্টারনেট এক্সপ্লোরার (পুরানো সংস্করণ) এ ফাইলগুলি অ্যারে অস্তিত্বহীন নয় কি?
টিয়াগো সিজার অলিভিরা

4
হ্যাঁ, এটি আইই 10 এর আগে কাজ করে না এবং কেবল অ্যান্ড্রয়েড এবং আইওএসে আংশিক সমর্থন রয়েছে। caniuse.com/fileapi । যদি এটি কেবল এই সহজ ছিল ...
স্টাইলগুলি

4
আমি মনে করি ফলাফলটি বাইটে আছে?
এরদল জি।

4
@ এরদালজি ভাল প্রশ্ন! এমডিএন ডকুমেন্টেশন অনুপস্থিত , তবে অবজেক্টগুলির FileList.filesএকটি অ্যারের মতো File, যা এটির একটি এক্সটেনশন Glob। এবং অনুমান অনুসারে , Globপ্রকৃতপক্ষে sizeসম্পত্তিটিকে বাইটের সংখ্যা হিসাবে দেখায় (খালি ফাইলের জন্য 0)। তাই হ্যাঁ, ফলাফলের বাইট হয়
জন ওয়েইজ

14
<script type="text/javascript">
function AlertFilesize(){
    if(window.ActiveXObject){
        var fso = new ActiveXObject("Scripting.FileSystemObject");
        var filepath = document.getElementById('fileInput').value;
        var thefile = fso.getFile(filepath);
        var sizeinbytes = thefile.size;
    }else{
        var sizeinbytes = document.getElementById('fileInput').files[0].size;
    }

    var fSExt = new Array('Bytes', 'KB', 'MB', 'GB');
    fSize = sizeinbytes; i=0;while(fSize>900){fSize/=1024;i++;}

    alert((Math.round(fSize*100)/100)+' '+fSExt[i]);
}
</script>

<input id="fileInput" type="file" onchange="AlertFilesize();" />

আইই এবং এফএফ নিয়ে কাজ করুন


15
ডাউনভোটেড কারণ উত্তরটি অ্যাক্টিভ্যাক্স ব্যবহার করে। 2015 সালে, এমনকি মাইক্রোসফ্ট অ্যাক্টিভ্যাক্স ত্যাগ করছে। দেওয়া যখন এটি একটি যুক্তিসঙ্গত পরামর্শ ছিল, আমি বিকাশকারীদের এখনই এবং ভবিষ্যতে এড়াতে পরামর্শ দেব।
স্কট পাথর

4
আমি এই সমাধানটি পছন্দ করি কারণ উইন্ডো.অ্যাকটিভএক্সঅজেক্টের জন্য কেবলমাত্র আইই এর পুরানো সংস্করণগুলি সত্য হবে true
রব ব্রেকিডেকার

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

@ নিকোলাসবুভ্রেটে - আমি সম্মত হই যে এই উত্তরটি অন্যদের তুলনায় অনেক পরিষ্কার, তবে আমি এই মুহুর্তে ডাউনটোটটি সরাতে পারি না। মূল প্রশ্নটি আইই এর পুরানো সংস্করণগুলির সাথে সামঞ্জস্যের জন্য জিজ্ঞাসা করেনি, এবং এই উত্তরটি পাঠকদের পরামর্শ দেয় না যে IE এর 5+ বছরের পুরানো সংস্করণকে সমর্থন করার জন্য বেশিরভাগ কোড রয়েছে।
স্কট পাথর

@ স্কটসটোন আসলে অ্যাক্টিভএক্স কেন ব্যবহার করবেন না সে সম্পর্কে আমার দৃষ্টিভঙ্গি থেকে আরও একটি স্পষ্ট বক্তব্য কারণ এটি আইইতে একটি সতর্কতা বার্তা প্রদর্শন করে যা একটি ভয়ঙ্কর (ভয়ঙ্কর?) ব্যবহারকারীর অভিজ্ঞতা।
নিকোলাস বোভ্রেট

13

আপলোড করার আগে একটি ফাইলের আকার পাওয়ার একটি সাধারণ উদাহরণ এখানে। যখনই সামগ্রীগুলি যুক্ত করা বা পরিবর্তন করা হয় এটি সনাক্ত করতে files[0].sizeএটি jQuery ব্যবহার করছে তবে আপনি jQuery ব্যবহার না করেই পেতে পারেন ।

$(document).ready(function() {
  $('#openFile').on('change', function(evt) {
    console.log(this.files[0].size);
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form action="upload.php" enctype="multipart/form-data" method="POST" id="uploadform">
  <input id="openFile" name="img" type="file" />
</form>

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


8

আমারও একই সমস্যা ছিল এবং মনে হয় আমাদের কাছে সঠিক সমাধান হয়নি। আশা করি এটি অন্যান্য লোককে সহায়তা করতে পারে।

চারপাশে অন্বেষণ করতে সময় নেওয়ার পরে, আমি শেষ পর্যন্ত উত্তরটি খুঁজে পেয়েছি। JQuery এর সাথে ফাইল সংযুক্ত করার জন্য এটি আমার কোড:

var attach_id = "id_of_attachment_file";
var size = $('#'+attach_id)[0].files[0].size;
alert(size);

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


আমি এটি পছন্দ করি কারণ এটি সর্বাধিক জনপ্রিয় সমাধানের মতো পরিবর্তন ইভেন্টে রাখার দরকার নেই। আপনি আমার প্রয়োজনগুলি পূরণ করার জন্য কোডটি পরিবর্তন করার অনুমতি দিয়েছিলেন তাও আমি পছন্দ করি :)
ম্যাট

8

সমস্ত ব্রাউজারে কাজ করার সেরা সমাধান;)

function GetFileSize(fileid) {
    try {
        var fileSize = 0;
        // for IE
        if(checkIE()) { //we could use this $.browser.msie but since it's deprecated, we'll use this function
            // before making an object of ActiveXObject, 
            // please make sure ActiveX is enabled in your IE browser
            var objFSO = new ActiveXObject("Scripting.FileSystemObject");
            var filePath = $("#" + fileid)[0].value;
            var objFile = objFSO.getFile(filePath);
            var fileSize = objFile.size; //size in b
            fileSize = fileSize / 1048576; //size in mb 
        }
        // for FF, Safari, Opeara and Others
        else {
            fileSize = $("#" + fileid)[0].files[0].size //size in b
            fileSize = fileSize / 1048576; //size in mb 
        }
        alert("Uploaded File Size is" + fileSize + "MB");
    }
    catch (e) {
        alert("Error is :" + e);
    }
}

http://www.dotnet-tricks.com / টিউটোরিয়াল/jquery/HHLN180712- থেকে পান- ফাইল-সাইজ- বিফোর- আপলোড- ব্যবহার-jquery.html

আপডেট: আমরা এই ফাংশনটি এটি ব্রাউজারের কিনা তা পরীক্ষা করতে ব্যবহার করব

function checkIE() {
    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

    if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)){  
        // If Internet Explorer, return version number
        alert(parseInt(ua.substring(msie + 5, ua.indexOf(".", msie))));
    } else {
        // If another browser, return 0
        alert('otherbrowser');
    }

    return false;
}

4
ডাউনভোটেড কারণ উত্তরটি অ্যাক্টিভ্যাক্স ব্যবহার করে। 2015 সালে, এমনকি মাইক্রোসফ্ট অ্যাক্টিভ্যাক্স ত্যাগ করছে। দেওয়া যখন এটি একটি যুক্তিসঙ্গত পরামর্শ ছিল, আমি বিকাশকারীদের এখনই এবং ভবিষ্যতে এড়াতে পরামর্শ দেব। -
স্কট পাথর

4
b ব্রাউজারটি jQuery থেকে 1.9 সংস্করণে সরানো হয়েছে (v 1.3 থেকে অবনমিত)।
সিলভিও দেলগাদো

4
@ স্কটসটোন এটি পশ্চাদপদ সামর্থ্যের জন্য এবং এটি সত্য নয় যে মাইক্রোসফ্ট এটি অ্যাক্টিভএক্সকে অনেক ক্ষেত্রে ব্যবহার করবে এবং এটি প্রমাণ হবে কম্পিউটার ওয়ার্ল্ড
পার্টিকেল

@ সিলভিওডেলগাদো পরিবর্তিত হয়েছে এবং আপডেট হয়েছে তারা একটি প্লাগইনে $। ব্রাউজারটিকে সরিয়ে দিয়েছে যাতে আমাদের আইই ব্রাউজারের জন্য কেবলমাত্র একটি ছোট পরীক্ষা প্রয়োজন (সমস্ত সংস্করণের সাথে কাজ করে)
ucefkh

4

$(document).ready(function() {
  $('#openFile').on('change', function(evt) {
    console.log(this.files[0].size);
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form action="upload.php" enctype="multipart/form-data" method="POST" id="uploadform">
  <input id="openFile" name="img" type="file" />
</form>


3

এইচটিএমএল 5 সমর্থনযুক্ত ব্রাউজারগুলির ইনপুট প্রকারের জন্য ফাইলের সম্পত্তি রয়েছে। এটি অবশ্যই পুরানো IE সংস্করণগুলিতে কাজ করবে না।

var inpFiles = document.getElementById('#fileID');
for (var i = 0; i < inpFiles.files.length; ++i) {
    var size = inpFiles.files.item(i).size;
    alert("File Size : " + size);
}

2

ucefkh এর সমাধানটি সবচেয়ে ভাল কাজ করেছে, তবে যেহেতু j ব্রাউজারটি jQuery 1.91 এ অবচয় করা হয়েছিল, তাই নেভিগেটর.উসার এজেন্ট ব্যবহার করতে হবে:

function IsFileSizeOk(fileid) {
    try {
        var fileSize = 0;
        //for IE
        if (navigator.userAgent.match(/msie/i)) {
            //before making an object of ActiveXObject, 
            //please make sure ActiveX is enabled in your IE browser
            var objFSO = new ActiveXObject("Scripting.FileSystemObject");
            var filePath = $("#" + fileid)[0].value;
            var objFile = objFSO.getFile(filePath);
            var fileSize = objFile.size; //size in b
            fileSize = fileSize / 1048576; //size in mb 
        }
        //for FF, Safari, Opeara and Others
        else {
            fileSize = $("#" + fileid)[0].files[0].size //size in b
            fileSize = fileSize / 1048576; //size in mb 
        }
        return (fileSize < 2.0);
    }
    catch (e) {
        alert("Error is :" + e);
    }
}

1

ফাইলাইজগুলি পেতে আপনাকে একটি অজ্যাক্স হেড অনুরোধ করতে হবে। jquery সঙ্গে এটি কিছু এই

  var req = $.ajax({
    type: "HEAD",
    url: yoururl,
    success: function () {
      alert("Size is " + request.getResponseHeader("Content-Length"));
    }
  });

তবে সেই ফাইল ইনপুটটি কি (খালি) সাফ হয়ে যাবে ?? আপনি কি উদাহরণ
বানাতে পারেন

1

দয়া করে ActiveXসম্ভাবনাগুলি ব্যবহার করবেন না কারণ এটি ইন্টারনেট এক্সপ্লোরারে একটি ভয়ঙ্কর সতর্কতা বার্তা প্রদর্শন করবে এবং আপনার ব্যবহারকারীদের দূরে সরিয়ে দেবে।

অ্যাক্টিভএক্স সতর্কতা

যে কেউ এই চেক বাস্তবায়ন করতে চায়, তারা শুধুমাত্র উপর নির্ভর করা উচিত নয় FileList বস্তুর আধুনিক ব্রাউজারে উপলব্ধ এবং শুধুমাত্র পুরোনো ব্রাউজারে (জন্য সার্ভার প্রান্তের চেক উপর নির্ভর প্রগতিশীল বর্ধিতকরণ )।

function getFileSize(fileInputElement){
    if (!fileInputElement.value ||
        typeof fileInputElement.files === 'undefined' ||
        typeof fileInputElement.files[0] === 'undefined' ||
        typeof fileInputElement.files[0].size !== 'number'
    ) {
        // File size is undefined.
        return undefined;
    }

    return fileInputElement.files[0].size;
}

0

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


0

আপনি এইচটিএমএল 5 ফাইল এপিআই ব্যবহার করে করতে পারেন: http://www.html5rocks.com/en/tutorials/file/dndfiles/

তবে আপনার পুরানো ব্রাউজারগুলির জন্য সর্বদা পিএইচপি (বা আপনি যে কোনও ব্যাকএন্ড ভাষা ব্যবহার করেন) এর ফ্যালব্যাক থাকা উচিত।


0

ব্যক্তিগতভাবে, আমি বলব যে এইচটিএমএল স্ট্যান্ডার্ড প্রদত্ত ওয়েব ওয়ার্ল্ডের উত্তরটি আজ সেরা। আপনার যদি IE <10 সমর্থন করতে চান তবে আপনাকে কিছুটা অ্যাক্টিভএক্স ব্যবহার করতে হবে। আমি স্ক্রিপ্টিংয়ের বিরুদ্ধে কোডিং জড়িত এমন সুপারিশগুলি এড়িয়ে যাব ileফাইসিসটেমবজেক্ট, অথবা সরাসরি অ্যাক্টিভেক্স ইনস্ট্যান্ট করা।

এই ক্ষেত্রে, আমার তৃতীয় পক্ষের জেএস লাইব্রেরি যেমন প্লুপলোড লোড ব্যবহার করে সাফল্য পেয়েছে যা এইচটিএমএল 5 এপিএস বা ফ্ল্যাশ / সিলভারলাইট নিয়ন্ত্রণগুলি সমর্থন করে না এমন ব্যাকফিল ব্রাউজারগুলিতে ব্যবহার করতে কনফিগার করা যেতে পারে। আইপি <10 এ কাজ করে এমন ফাইলের আকার চেক করার জন্য প্লুপলোডের একটি ক্লায়েন্ট সাইড এপিআই রয়েছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.