ইনপুট ফাইলের পরিবর্তনের ইভেন্টে এজ্যাক্স / পিএইচপি ব্যবহার করে ফাইল আপলোড করার আগে ফাইলের আকার খুঁজে পাওয়ার কোনও উপায় আছে কি?
ইনপুট ফাইলের পরিবর্তনের ইভেন্টে এজ্যাক্স / পিএইচপি ব্যবহার করে ফাইল আপলোড করার আগে ফাইলের আকার খুঁজে পাওয়ার কোনও উপায় আছে কি?
উত্তর:
এইচটিএমএল বেলো জন্য
<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);
});
নিম্নলিখিত থ্রেড দেখুন:
FileList.files
একটি অ্যারের মতো File
, যা এটির একটি এক্সটেনশন Glob
। এবং অনুমান অনুসারে , Glob
প্রকৃতপক্ষে size
সম্পত্তিটিকে বাইটের সংখ্যা হিসাবে দেখায় (খালি ফাইলের জন্য 0)। তাই হ্যাঁ, ফলাফলের বাইট হয় ।
<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();" />
আইই এবং এফএফ নিয়ে কাজ করুন
আপলোড করার আগে একটি ফাইলের আকার পাওয়ার একটি সাধারণ উদাহরণ এখানে। যখনই সামগ্রীগুলি যুক্ত করা বা পরিবর্তন করা হয় এটি সনাক্ত করতে 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>
এখানে আরও একটি সম্পূর্ণ উদাহরণ, ফর্মডাটাতে ফাইলগুলি টেনে আনুন এবং ড্রপ করুন এবং পোষ্টের মাধ্যমে কোনও সার্ভারে আপলোড করুন কনসেপ্ট কোডের কিছু প্রমাণ । এতে ফাইল আকারের জন্য একটি সাধারণ চেক অন্তর্ভুক্ত রয়েছে।
আমারও একই সমস্যা ছিল এবং মনে হয় আমাদের কাছে সঠিক সমাধান হয়নি। আশা করি এটি অন্যান্য লোককে সহায়তা করতে পারে।
চারপাশে অন্বেষণ করতে সময় নেওয়ার পরে, আমি শেষ পর্যন্ত উত্তরটি খুঁজে পেয়েছি। JQuery এর সাথে ফাইল সংযুক্ত করার জন্য এটি আমার কোড:
var attach_id = "id_of_attachment_file";
var size = $('#'+attach_id)[0].files[0].size;
alert(size);
এটি ফাইলের আকার পাওয়ার জন্য উদাহরণ কোড। আপনি যদি অন্য স্টাফগুলি করতে চান তবে আপনার প্রয়োজনগুলি পূরণ করার জন্য নির্দ্বিধায় কোডটি পরিবর্তন করুন।
সমস্ত ব্রাউজারে কাজ করার সেরা সমাধান;)
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;
}
$(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>
এইচটিএমএল 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);
}
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);
}
}
ফাইলাইজগুলি পেতে আপনাকে একটি অজ্যাক্স হেড অনুরোধ করতে হবে। jquery সঙ্গে এটি কিছু এই
var req = $.ajax({
type: "HEAD",
url: yoururl,
success: function () {
alert("Size is " + request.getResponseHeader("Content-Length"));
}
});
দয়া করে 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;
}
আপনি এইচটিএমএল 5 ফাইল এপিআই ব্যবহার করে করতে পারেন: http://www.html5rocks.com/en/tutorials/file/dndfiles/
তবে আপনার পুরানো ব্রাউজারগুলির জন্য সর্বদা পিএইচপি (বা আপনি যে কোনও ব্যাকএন্ড ভাষা ব্যবহার করেন) এর ফ্যালব্যাক থাকা উচিত।
ব্যক্তিগতভাবে, আমি বলব যে এইচটিএমএল স্ট্যান্ডার্ড প্রদত্ত ওয়েব ওয়ার্ল্ডের উত্তরটি আজ সেরা। আপনার যদি IE <10 সমর্থন করতে চান তবে আপনাকে কিছুটা অ্যাক্টিভএক্স ব্যবহার করতে হবে। আমি স্ক্রিপ্টিংয়ের বিরুদ্ধে কোডিং জড়িত এমন সুপারিশগুলি এড়িয়ে যাব ileফাইসিসটেমবজেক্ট, অথবা সরাসরি অ্যাক্টিভেক্স ইনস্ট্যান্ট করা।
এই ক্ষেত্রে, আমার তৃতীয় পক্ষের জেএস লাইব্রেরি যেমন প্লুপলোড লোড ব্যবহার করে সাফল্য পেয়েছে যা এইচটিএমএল 5 এপিএস বা ফ্ল্যাশ / সিলভারলাইট নিয়ন্ত্রণগুলি সমর্থন করে না এমন ব্যাকফিল ব্রাউজারগুলিতে ব্যবহার করতে কনফিগার করা যেতে পারে। আইপি <10 এ কাজ করে এমন ফাইলের আকার চেক করার জন্য প্লুপলোডের একটি ক্লায়েন্ট সাইড এপিআই রয়েছে।