如何让 jQuery 限制上传的文件类型?

IT技术 javascript jquery file-upload file-type
2021-01-31 11:35:04

我想让 jQuery 将文件上传字段限制为仅 jpg/jpeg、png 和 gif。我已经在做后端检查了PHPJavaScript已经通过一个函数运行我的提交按钮,所以我真的只需要知道如何在提交或警报之前检查文件类型。

6个回答

您可以像获取任何其他字段一样获取文件字段的值。但是,您无法更改它。

因此,要从表面上检查文件是否具有正确的扩展名,您可以执行以下操作:

var ext = $('#my_file_field').val().split('.').pop().toLowerCase();
if($.inArray(ext, ['gif','png','jpg','jpeg']) == -1) {
    alert('invalid extension!');
}
值得一提的是,这不是一个万无一失的方法。在一天结束时,请确保您的后端正在检查文件的前几个字节,以确保它实际上是您真正想要的文件类型。另一件要考虑的事情是,在 linux 和 osx 中,您可以拥有一个没有扩展名的文件,这实际上是您想要的类型……所以这也会失败
2021-03-15 11:35:04
并将其绑定到您的表单: $("#my_upload_form").bind("submit", function() { // above check });
2021-03-18 11:35:04
$("#my_upload_form").bind("submit", function() { // above check });现在应该使用$("#my_upload_form").submit(function() { // above check }); api.jquery.com/submit绑定您还可以阻止表单提交使用$("#my_upload_form").submit(function(e) { // above check e.preventDefault(); });
2021-03-25 11:35:04
在这种情况下,如果用户将".jpg" 例如添加到 MS Word 文件,FileUpload 将接受该文件作为图片。我认为这是不对的。
2021-04-05 11:35:04
你可以用 $('#file_field').change(function(){// above check});
2021-04-08 11:35:04

仅此任务不需要插件。从其他几个脚本拼凑而成:

$('INPUT[type="file"]').change(function () {
    var ext = this.value.match(/\.(.+)$/)[1];
    switch (ext) {
        case 'jpg':
        case 'jpeg':
        case 'png':
        case 'gif':
            $('#uploadButton').attr('disabled', false);
            break;
        default:
            alert('This is not an allowed file type.');
            this.value = '';
    }
});

这里的技巧是将上传按钮设置为禁用,除非并且直到选择了有效的文件类型。

对不起兄弟,但这是一个糟糕的正则表达式。文件名称中允许有点。"giel.asd.aaaaa.jpg.png".match(/\.(.+)$/)
2021-04-10 11:35:04

您可以使用 jQuery 的验证插件:http : //docs.jquery.com/Plugins/Validation

它恰好有一个 accept() 规则,它完全符合您的需要:http : //docs.jquery.com/Plugins/Validation/Methods/accept#extension

请注意,控制文件扩展名并不是万无一失的,因为它与文件的 mimetype 没有任何关系。因此,您可以拥有一个 .png 格式的 word 文档和一个 .doc 格式的完全有效的 png 图像。所以不要忘记在服务器端制作更多控件;)

您能否提供示例如何在 IE11上的plugins.krajee.com/file-input#option-allowedfileextensions 中使用它
2021-04-09 11:35:04

对于前端,如果您使用的是文件字段,则放置“接受”属性非常方便

例子:

<input id="file" type="file" name="file" size="30" 
       accept="image/jpg,image/png,image/jpeg,image/gif" 
/>

几个重要的注意事项:

比使用 JQuery 好多了
2021-04-03 11:35:04

不想检查 MIME 而不是用户撒谎的任何扩展名?如果是这样,那么它少于一行:

<input type="file" id="userfile" accept="image/*|video/*" required />
没有得到他需要的东西。从具有不同扩展名的文件夹中选择图像只是为了更容易处理。正如你在这里看到的 -> imageshack.us/a/img20/8451/switchzz.jpg
2021-03-14 11:35:04
由于它不会损害 IE<10,并且不会损害其他代码,因此它是对您要限制的内容的有效限制。
2021-03-28 11:35:04