admin管理员组文章数量:1134247
When using <input type="file" multiple>
it's possible for the user to choose multiple files.
How does ones sets a limit for how many files can be chosen, for instance two?
When using <input type="file" multiple>
it's possible for the user to choose multiple files.
How does ones sets a limit for how many files can be chosen, for instance two?
Share Improve this question edited Dec 25, 2022 at 21:02 Michael M. 11.1k11 gold badges21 silver badges43 bronze badges asked Apr 11, 2012 at 11:56 rjmcbrjmcb 3,7259 gold badges33 silver badges47 bronze badges 2- 1 This might be helpful: stackoverflow.com/questions/9813556/… – Yan Berk Commented Apr 11, 2012 at 11:59
- Possible duplicate of Count and limit the number of files uploaded (HTML file input) – gbjbaanb Commented Jun 27, 2017 at 16:13
9 Answers
Reset to default 83You could run some jQuery client-side validation to check:
$(function(){
$("input[type='submit']").click(function(){
var $fileUpload = $("input[type='file']");
if (parseInt($fileUpload.get(0).files.length)>2){
alert("You can only upload a maximum of 2 files");
}
});
});
http://jsfiddle.net/Curt/u4NuH/
But remember to check on the server side too as client-side validation can be bypassed quite easily.
On change of the input track how many files are selected:
$("#image").on("change", function() {
if ($("#image")[0].files.length > 2) {
alert("You can select only 2 images");
} else {
$("#imageUploadForm").submit();
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<strong>On change of the input track how many files are selected:</strong>
<input name="image[]" id="image" type="file" multiple="multiple" accept="image/jpg, image/jpeg" >
This should work and protect your form from being submitted if the number of files is greater then max_file_number
.
$(function() {
var // Define maximum number of files.
max_file_number = 3,
// Define your form id or class or just tag.
$form = $('form'),
// Define your upload field class or id or tag.
$file_upload = $('#image_upload', $form),
// Define your submit class or id or tag.
$button = $('.submit', $form);
// Disable submit button on page ready.
$button.prop('disabled', 'disabled');
$file_upload.on('change', function () {
var number_of_images = $(this)[0].files.length;
if (number_of_images > max_file_number) {
alert(`You can upload maximum ${max_file_number} files.`);
$(this).val('');
$button.prop('disabled', 'disabled');
} else {
$button.prop('disabled', false);
}
});
});
Another possible solution with JS
function onSelect(e) {
if (e.files.length > 5) {
alert("Only 5 files accepted.");
e.preventDefault();
}
}
In javascript you can do something like this
<input
ref="fileInput"
multiple
type="file"
style="display: none"
@change="trySubmitFile"
>
and the function can be something like this.
trySubmitFile(e) {
if (this.disabled) return;
const files = e.target.files || e.dataTransfer.files;
if (files.length > 5) {
alert('You are only allowed to upload a maximum of 2 files at a time');
}
if (!files.length) return;
for (let i = 0; i < Math.min(files.length, 2); i++) {
this.fileCallback(files[i]);
}
}
I am also searching for a solution where this can be limited at the time of selecting files but until now I could not find anything like that.
You should also consider using libraries to do that: they allow limiting and much more:
FineUploader. Demo using
validation.itemLimit
as of 5.16.2:var restrictedUploader = new qq.FineUploader({ validation: { itemLimit: 3, } });
bluimp's jQuery File Upload Plugin. Usage: jquery file upload restricting number of files using
maxNumberOfFiles
as of v9.22.0:$('#fileuploadbasic').fileupload({ maxNumberOfFiles: 6 });
They are also available at https://cdnjs.com/
Here is an example, where I am sending image through input type file. The form is submitted separately through axios on onSubmit event of form, so I am using FormData web api to send form contents as multipart/form data.
In case of handling image count, under the condition where name is equal to images, we alert the message and also set the value to empty array. Still on the UI, it will show the count of images slected so, we write the messsage clear, your images won't be sent.
Here is the properties I have given to the file input field, as a part of JS object. As I am looping through an array to populate input fields.
{
name: "images",
type: "file",
accept: "image/*",
multiple: true,
},
And down here is the code where I have handled OnChange and Onsubmit
const handleOnChange = (e) => {
let { checked, name, value } = e.target;
if (name === "status") {
value = checked ? "active" : "inactive";
}
if (name === "images") {
value = [...e.target.files];
if (value.length > 5) {
value = [];
alert("Can select only upto 5 images, your images won't be sent");
}
}
setForm({ ...form, [name]: value });
};
const handleOnSubmit = (e) => {
e.preventDefault();
console.log(form);
// set data with formDataApi
const formData = new FormData();
for (const key in form) {
formData.append(key, form[key]);
}
dispatch(postProductsAction(formData));
};
Use two <input type=file>
elements instead, without the multiple
attribute.
if you want php you can count the array and just make an if statement like
if((int)count($_FILES['i_dont_know_whats_coming_next'] > 2)
echo "error message";
本文标签: javascriptHow to limit the maximum files chosen when using multiple file inputStack Overflow
版权声明:本文标题:javascript - How to limit the maximum files chosen when using multiple file input - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1736856517a1955735.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论