文件总大小和更新计数器
File size total and update counter
我需要计算上传文件的总大小,然后将其从 10 减少,因为总可用限制仅为 10MB。每次归档 upload/add 它应该从剩余 space 中减少。
例如初始限制 10 MB。我上传了 1 个 3 MB 的文件,剩余 7 MB。现在另一个4MB的文件,剩下的应该是3MB。
问题:我可以在上传过程中禁用文件上传按钮吗?即使有任何文件正在上传,也应该禁用它,并且只有在所有文件都完成上传后才能添加更多文件。
$(document).ready(function(){
$("#addFile").click(function() {
$("#my_file").click();
});
$("#my_file").change(function(e) {
var files = e.target.files;
for (var i = 0, f; f = files[i]; i++) {
ParseFile(f);
}
function ParseFile(file) {
var filename = file.name.replace(/\..+$/, '');
var filesize = file.size / 1024;
filesize = (Math.round((filesize / 1024) * 100) / 100);
var filetype = file.type.split('/').pop().toUpperCase();
if (filetype == 'PDF' || filetype == 'JPEG' || filetype == 'JPG' || filetype == 'PNG') {
$("#filedetails").append("<tr><td><strong>" + filename + "</strong></td><td>" + filesize + " MB</td><td>" + filetype + "</td><td><a href='#'>Delete</td></tr>");
}
else {
alert('Only JPG, PDF n PNG files are allowed to upload.');
}
}
});
});
<!doctype html>
<html>
<head>
<title>File Upload</title>
<script src="https://code.jquery.com/jquery-3.1.0.min.js"></script>
<script src="fileupload.js"></script>
</head>
<body>
<input type="button" value="Add File(s)" id="addFile">
<input type="file" id="my_file" style="display:none;" multiple="multiple" accept="image/png, image/jpg, image/jpeg, application/pdf">
<table cellspacing="0" cellpadding="0" width="100%" border="1">
<thead>
<tr>
<th>Name</th>
<th>Size</th>
<th>Type</th>
<th></th>
</thead>
<tbody id="filedetails"></tbody>
</table>
<div id="totalsize">Total Uploaded File Size(s): </div>
</body>
</html>
您需要 return 从 ParseFile 函数到 foreach 循环的 filesize,并一起总结。但请记住 - 如果您想发送多个文件,您需要一次 select 所有文件。
当然必须有一些验证来检查 selected 文件是否大于 10MB。
$(document).ready(function(){
var maxSize = 10, // MB
currentSize = 0,
remainSize = 0;
$("#addFile").click(function() {
$("#my_file").click();
});
$("#my_file").change(function(e) {
var files = e.target.files;
for (var i = 0, f; f = files[i]; i++) {
if (ParseFile(f) === false) {
alert('not enought space - there\'s only ' + remainSize.toFixed(2) + ' MB left');
break;
}
}
$('#totalsize span').text(currentSize.toFixed(2));
$('#remainsize span').text(remainSize.toFixed(2));
function ParseFile(file) {
var filename = file.name.replace(/\..+$/, '');
var filesize = file.size / 1024;
filesize = (Math.round((filesize / 1024) * 100) / 100);
var filetype = file.type.split('/').pop().toUpperCase();
if (filetype == 'PDF' || filetype == 'JPEG' || filetype == 'JPG' || filetype == 'PNG') {
if (currentSize + filesize >= maxSize) {
return false;
}
currentSize += filesize;
remainSize = maxSize - currentSize;
$("#filedetails").append("<tr><td><strong>" + filename + "</strong></td><td>" + filesize + " MB</td><td>" + filetype + "</td><td><a href='#'>Delete</td></tr>");
}
else {
alert('Only JPG, PDF n PNG files are allowed to upload.');
}
}
});
});
<!doctype html>
<html>
<head>
<title>File Upload</title>
<script src="https://code.jquery.com/jquery-3.1.0.min.js"></script>
<script src="fileupload.js"></script>
</head>
<body>
<input type="button" value="Add File(s)" id="addFile">
<input type="file" id="my_file" style="display:none;" multiple="multiple" accept="image/png, image/jpg, image/jpeg, application/pdf">
<table cellspacing="0" cellpadding="0" width="100%" border="1">
<thead>
<tr>
<th>Name</th>
<th>Size</th>
<th>Type</th>
<th></th>
</thead>
<tbody id="filedetails"></tbody>
</table>
<div id="totalsize">Total Uploaded File Size(s): <span>0</span> MB</div>
<div id="remainsize">Remain: <span>0</span> MB</div>
</body>
</html>
编辑: 下面是上述代码的扩展版本,实现了 'delete' 功能。 强烈建议重构。
$(document).ready(function(){
var maxSize = 10, // MB
currentSize = 0,
remainSize = 0;
function refreshSpace() {
$('#totalsize span').text(currentSize.toFixed(2));
$('#remainsize span').text(remainSize.toFixed(2));
}
$("#addFile").click(function() {
$("#my_file").click();
});
$("#my_file").change(function(e) {
var files = e.target.files;
for (var i = 0, f; f = files[i]; i++) {
if (ParseFile(f) === false) {
alert('not enought space - there\'s only ' + remainSize.toFixed(2) + ' MB left');
break;
}
}
refreshSpace();
function ParseFile(file) {
var filename = file.name.replace(/\..+$/, '');
var filesize = file.size / 1024;
filesize = (Math.round((filesize / 1024) * 100) / 100);
var filetype = file.type.split('/').pop().toUpperCase();
if (filetype == 'PDF' || filetype == 'JPEG' || filetype == 'JPG' || filetype == 'PNG') {
if (currentSize + filesize >= maxSize) {
return false;
}
currentSize += filesize;
remainSize = maxSize - currentSize;
$("#filedetails").append("<tr data-filesize='" + filesize + "'><td><strong>" + filename + "</strong></td><td>" + filesize + " MB</td><td>" + filetype + "</td><td><a class='delete' href='#'>Delete</td></tr>");
}
else {
alert('Only JPG, PDF n PNG files are allowed to upload.');
}
}
});
$("#filedetails").on('click', '.delete', function(e) {
var $parent = $(this).closest('tr'),filesize = $parent.attr('data-filesize');
currentSize -= filesize;
remainSize = maxSize - currentSize;
refreshSpace();
$parent.remove();
});
});
<!doctype html>
<html>
<head>
<title>File Upload</title>
<script src="https://code.jquery.com/jquery-3.1.0.min.js"></script>
<script src="fileupload.js"></script>
</head>
<body>
<input type="button" value="Add File(s)" id="addFile">
<input type="file" id="my_file" style="display:none;" multiple="multiple" accept="image/png, image/jpg, image/jpeg, application/pdf">
<table cellspacing="0" cellpadding="0" width="100%" border="1">
<thead>
<tr>
<th>Name</th>
<th>Size</th>
<th>Type</th>
<th></th>
</thead>
<tbody id="filedetails"></tbody>
</table>
<div id="totalsize">Total Uploaded File Size(s): <span>0.00</span> MB</div>
<div id="remainsize">Remain: <span>10.00</span> MB</div>
</body>
</html>
我需要计算上传文件的总大小,然后将其从 10 减少,因为总可用限制仅为 10MB。每次归档 upload/add 它应该从剩余 space 中减少。 例如初始限制 10 MB。我上传了 1 个 3 MB 的文件,剩余 7 MB。现在另一个4MB的文件,剩下的应该是3MB。
问题:我可以在上传过程中禁用文件上传按钮吗?即使有任何文件正在上传,也应该禁用它,并且只有在所有文件都完成上传后才能添加更多文件。
$(document).ready(function(){
$("#addFile").click(function() {
$("#my_file").click();
});
$("#my_file").change(function(e) {
var files = e.target.files;
for (var i = 0, f; f = files[i]; i++) {
ParseFile(f);
}
function ParseFile(file) {
var filename = file.name.replace(/\..+$/, '');
var filesize = file.size / 1024;
filesize = (Math.round((filesize / 1024) * 100) / 100);
var filetype = file.type.split('/').pop().toUpperCase();
if (filetype == 'PDF' || filetype == 'JPEG' || filetype == 'JPG' || filetype == 'PNG') {
$("#filedetails").append("<tr><td><strong>" + filename + "</strong></td><td>" + filesize + " MB</td><td>" + filetype + "</td><td><a href='#'>Delete</td></tr>");
}
else {
alert('Only JPG, PDF n PNG files are allowed to upload.');
}
}
});
});
<!doctype html>
<html>
<head>
<title>File Upload</title>
<script src="https://code.jquery.com/jquery-3.1.0.min.js"></script>
<script src="fileupload.js"></script>
</head>
<body>
<input type="button" value="Add File(s)" id="addFile">
<input type="file" id="my_file" style="display:none;" multiple="multiple" accept="image/png, image/jpg, image/jpeg, application/pdf">
<table cellspacing="0" cellpadding="0" width="100%" border="1">
<thead>
<tr>
<th>Name</th>
<th>Size</th>
<th>Type</th>
<th></th>
</thead>
<tbody id="filedetails"></tbody>
</table>
<div id="totalsize">Total Uploaded File Size(s): </div>
</body>
</html>
您需要 return 从 ParseFile 函数到 foreach 循环的 filesize,并一起总结。但请记住 - 如果您想发送多个文件,您需要一次 select 所有文件。
当然必须有一些验证来检查 selected 文件是否大于 10MB。
$(document).ready(function(){
var maxSize = 10, // MB
currentSize = 0,
remainSize = 0;
$("#addFile").click(function() {
$("#my_file").click();
});
$("#my_file").change(function(e) {
var files = e.target.files;
for (var i = 0, f; f = files[i]; i++) {
if (ParseFile(f) === false) {
alert('not enought space - there\'s only ' + remainSize.toFixed(2) + ' MB left');
break;
}
}
$('#totalsize span').text(currentSize.toFixed(2));
$('#remainsize span').text(remainSize.toFixed(2));
function ParseFile(file) {
var filename = file.name.replace(/\..+$/, '');
var filesize = file.size / 1024;
filesize = (Math.round((filesize / 1024) * 100) / 100);
var filetype = file.type.split('/').pop().toUpperCase();
if (filetype == 'PDF' || filetype == 'JPEG' || filetype == 'JPG' || filetype == 'PNG') {
if (currentSize + filesize >= maxSize) {
return false;
}
currentSize += filesize;
remainSize = maxSize - currentSize;
$("#filedetails").append("<tr><td><strong>" + filename + "</strong></td><td>" + filesize + " MB</td><td>" + filetype + "</td><td><a href='#'>Delete</td></tr>");
}
else {
alert('Only JPG, PDF n PNG files are allowed to upload.');
}
}
});
});
<!doctype html>
<html>
<head>
<title>File Upload</title>
<script src="https://code.jquery.com/jquery-3.1.0.min.js"></script>
<script src="fileupload.js"></script>
</head>
<body>
<input type="button" value="Add File(s)" id="addFile">
<input type="file" id="my_file" style="display:none;" multiple="multiple" accept="image/png, image/jpg, image/jpeg, application/pdf">
<table cellspacing="0" cellpadding="0" width="100%" border="1">
<thead>
<tr>
<th>Name</th>
<th>Size</th>
<th>Type</th>
<th></th>
</thead>
<tbody id="filedetails"></tbody>
</table>
<div id="totalsize">Total Uploaded File Size(s): <span>0</span> MB</div>
<div id="remainsize">Remain: <span>0</span> MB</div>
</body>
</html>
编辑: 下面是上述代码的扩展版本,实现了 'delete' 功能。 强烈建议重构。
$(document).ready(function(){
var maxSize = 10, // MB
currentSize = 0,
remainSize = 0;
function refreshSpace() {
$('#totalsize span').text(currentSize.toFixed(2));
$('#remainsize span').text(remainSize.toFixed(2));
}
$("#addFile").click(function() {
$("#my_file").click();
});
$("#my_file").change(function(e) {
var files = e.target.files;
for (var i = 0, f; f = files[i]; i++) {
if (ParseFile(f) === false) {
alert('not enought space - there\'s only ' + remainSize.toFixed(2) + ' MB left');
break;
}
}
refreshSpace();
function ParseFile(file) {
var filename = file.name.replace(/\..+$/, '');
var filesize = file.size / 1024;
filesize = (Math.round((filesize / 1024) * 100) / 100);
var filetype = file.type.split('/').pop().toUpperCase();
if (filetype == 'PDF' || filetype == 'JPEG' || filetype == 'JPG' || filetype == 'PNG') {
if (currentSize + filesize >= maxSize) {
return false;
}
currentSize += filesize;
remainSize = maxSize - currentSize;
$("#filedetails").append("<tr data-filesize='" + filesize + "'><td><strong>" + filename + "</strong></td><td>" + filesize + " MB</td><td>" + filetype + "</td><td><a class='delete' href='#'>Delete</td></tr>");
}
else {
alert('Only JPG, PDF n PNG files are allowed to upload.');
}
}
});
$("#filedetails").on('click', '.delete', function(e) {
var $parent = $(this).closest('tr'),filesize = $parent.attr('data-filesize');
currentSize -= filesize;
remainSize = maxSize - currentSize;
refreshSpace();
$parent.remove();
});
});
<!doctype html>
<html>
<head>
<title>File Upload</title>
<script src="https://code.jquery.com/jquery-3.1.0.min.js"></script>
<script src="fileupload.js"></script>
</head>
<body>
<input type="button" value="Add File(s)" id="addFile">
<input type="file" id="my_file" style="display:none;" multiple="multiple" accept="image/png, image/jpg, image/jpeg, application/pdf">
<table cellspacing="0" cellpadding="0" width="100%" border="1">
<thead>
<tr>
<th>Name</th>
<th>Size</th>
<th>Type</th>
<th></th>
</thead>
<tbody id="filedetails"></tbody>
</table>
<div id="totalsize">Total Uploaded File Size(s): <span>0.00</span> MB</div>
<div id="remainsize">Remain: <span>10.00</span> MB</div>
</body>
</html>