在blueimp

时间:2017-11-25 13:23:37

标签: jquery html blueimp

我正在使用blueimp上传文件。它的工作正常。但我想上传一定宽度/高度的图像。 我试着按照这个链接 blueimp fileupload - check the image width and height before upload 文件只有这个数据

lastmodified:1502124635085
name:name.jgp
size:111111
type:"image/jpeg"

但缺少宽度和高度 以下是代码的一部分

add: function (e, data) {
                if (e.isDefaultPrevented()) {
                    return false;
                }

                console.log(data.files[0]);

                var $this = $(this),
                    that = $this.data('blueimp-fileupload') ||
                        $this.data('fileupload'),
                    options = that.options;
                data.context = that._renderUpload(data.files)
                    .data('data', data)
                    .addClass('processing');
                options.filesContainer[
                    options.prependFiles ? 'prepend' : 'append'
                ](data.context);
                that._forceReflow(data.context);
                that._transition(data.context);
                data.process(function () {
                    return $this.fileupload('process', data);
                }).always(function () {
                    data.context.each(function (index) {
                        $(this).find('.size').text(
                            that._formatFileSize(data.files[index].size)
                        );
                    }).removeClass('processing');
                    that._renderPreviews(data);
                }).done(function () {
                    data.context.find('.start').prop('disabled', false);
                    if ((that._trigger('added', e, data) !== false) &&
                            (options.autoUpload || data.autoUpload) &&
                            data.autoUpload !== false) {
                        data.submit();
                    }
                }).fail(function () {
                    if (data.files.error) {
                        data.context.each(function (index) {
                            var error = data.files[index].error;
                            if (error) {
                                $(this).find('.error').text(error);
                            }
                        });
                    }
                });
            },

是获取文件数据还是其他位置的正确位置。 感谢

1 个答案:

答案 0 :(得分:1)

您可以将已降低成本的process action添加到默认process queue中 以下示例仅允许1920x1080的图像通过。将跳过非图像文件。 FileReader仅支持IE10 +

$.blueimp.fileupload.prototype.options.processQueue.push({action: 'validateImage'});

// add a customised validator for image width for height, 1920x1080
$.widget('blueimp.fileupload', $.blueimp.fileupload, {
    processActions: {
      validateImage: function(data) {
        var dfd = $.Deferred();
        var file = data.files[data.index];
        if( !/(\.|\/)(gif|jpe?g|png)$/i.test(file.name)){
          dfd.resolveWith(this, [data]);
        }
        else {
          var reader = new FileReader();
          reader.readAsDataURL(file);
          reader.onload = function() {
            var image = new Image();
            image.src = reader.result;
            image.onload = function() {
              if(this.width !== 1920 || this.height !== 1080) {
                data.files.error = true
                file.error = 'Image have to be 1920x1080';
                dfd.rejectWith(this, [data]);
              }
              else {
                dfd.resolveWith(this, [data]);
              }
            }
          };
        }
        return dfd.promise();
      }
    }
});