plupload flash运行时在IE8上不起作用

时间:2014-02-21 19:43:34

标签: c# javascript internet-explorer-8 plupload

我在我的网站上使用plupload flash运行时将文件作为附件上传并通过电子邮件发送。该网站在Chrome,IE9和IE11上运行良好,但在IE8上运行不正常。我的大多数用户都将使用IE8。我一直在尝试许多不同的东西,但似乎都没有。任何人都可以建议我解决方案吗?

这是我上传文件的javascript代码。

modules.compose = (function () {
"use strict";

var config = {
    id: '',
    requestToken: $('meta[name="__AntiForgeryToken"]').attr('content'),
    runtimes: 'gears,flash,silverlight,browserplus,html5',
    maxFileSize: '200mb',
    maxQueueSize: 10485760,
    chunkSize: '1mb',
    pingFrequency: 100000,
    isUploaderOpen: false
},
bindUploader = function () {
    $("#uploader").pluploadQueue({
        // General settings
        runtimes: config.runtimes,
        url: '/upload.ashx' + '?id=' + config.id,
        max_file_size: config.maxFileSize,
        chunk_size: config.chunkSize,
        unique_names: false,
        headers: { '__AntiForgeryToken': config.requestToken },

        // Browse filters
        filters: [
            { title: "All files", extensions: "*.*" },
            { title: "Image files", extensions: "jpg,gif,png,tiff" },
            { title: "XML files", extensions: "xml" },
            { title: "PDF documents", extensions: "pdf" },
            { title: "Zip files", extensions: "zip" },
            { title: "Text files", extensions: "txt,log" },
            { title: "Powerpoint documents", extensions: "ppt,pptx,pptm,potx,potm,ppam,ppsx,ppsm,sldx,sldm,thmx" },
            { title: "Excel documents", extensions: "xls,xlsx,xlsm,xltx,xltm,xlsb,xlam" },
            { title: "Word documents", extensions: "doc,docx,docm,dotx,dotm" },                
        ],
        preinit: {
            Init: function (up, info) {
                $('.plupload_header, .plupload_start').remove();
            }
        },
        init: {
            UploadProgress: function (up, file) {
                bumpProgress(up, file);
            },
            StateChanged: function (up) {
                if (up.total && up.files && up.total.uploaded === up.files.length) {
                    var parent = $('#upload-status').parent();
                    $('#upload-status').fadeOut('slow').remove();
                    $('#send-status').appendTo(parent).fadeIn('slow');

                    __doPostBack('ctl00$Content$btnSendMessage', '');
                }
            },
            FilesAdded: function (up, files) {
                var i = 0;
                while (i++ < up.files.length) {
                    $('#btnSendMessage').removeAttr("disabled");
                    var ii = i;
                    while (ii < up.files.length) {
                        if (up.files[i - 1].name == up.files[ii].name) {
                            up.removeFile(up.files[ii]);
                        } else {
                            ii++;
                        }
                    }
                }
            },
            QueueChanged: function (up) {
                if (up.total.size > config.maxQueueSize) {
                    $('#upload-warning-modal').modal('show');

                    if (up.total.queued - 1 >= 0) {
                        up.removeFile(up.files[up.total.queued - 1]);
                    }
                }
            }
        },

        // Flash settings
        flash_swf_url: '/assets/js/plupload/plupload.flash.swf',

        // Silverlight settings
        silverlight_xap_url: '/assets/js/plupload/plupload.silverlight.xap'
    });
},
bindAddAttachments = function () {
    $('#btnAddAttachments').click(function (e) {
        e.preventDefault();

        if (!config.isUploaderOpen) {
            bindUploader();
            $('#uploader').show();

            config.isUploaderOpen = true;
        }

        $(this).attr('disabled', 'disabled');
    });
},
bindSendMessage = function () {
    $('#btnSendMessage').click(function (e) {
        e.preventDefault();

        if (!Page_ClientValidate()) {
            return;
        }

        $('.plupload_filelist_footer').css('display', 'none');

        $('#uploader').block({
            message: $('#upload-status'),
            css: {
                padding: 0,
                margin: 0,
                width: '50%',
                top: '50%',
                left: '35%',
                textAlign: 'left',
                color: '#000',
                border: '0',
                backgroundColor: 'transparent',
                cursor: 'wait'
            }
        });

        $('input[type="text"], textarea').prop('readonly', true).addClass('disabled');

        $('#btnSendMessage').button('loading');

        var queue = $("#uploader").pluploadQueue();

        if (queue) {
            queue.start();
        } else {
            __doPostBack('ctl00$Content$btnSendMessage', '');
        }
    });
},
bumpProgress = function (up, file) {
    if (up.total.percent >= 80) {
        $('#upload-status .progress').removeClass('progress-info').addClass('progress-success');
    }

    $('#upload-status .progress .bar').css('width', up.total.percent + '%');
},
bindTextareaLimit = function () {
    $('#txtMessage').limit('2000', '#charsLeft');
},
initAttachmentsButton = function () {
    $('#btnAddAttachments').prop('disabled', '');
},
initPing = function () {
    (function ping() {
        $.get("/ping.ashx");
        setTimeout(ping, config.pingFrequency);
    })();
};

return {
    init: function (options) {
        config = $.extend({}, config, options || {});

        $(function () {
            initAttachmentsButton();
            initPing();
            bindSendMessage();
            bindAddAttachments();
            bindTextareaLimit();
        });
    },
    validateRecipientEmail: function (sender, args) {
        var proxy = new ServiceProxy('/Default.aspx/', { async: false });

        proxy.invoke(
        'IsValidRecipient',
        { recipient: $('#txtRecipient').val() },
        function (result) {
            return (args.IsValid = result.d);
        });
    },
    validateSenderEmail: function (sender, args) {
        var proxy = new ServiceProxy('/Default.aspx/', { async: false });

        proxy.invoke(
        'IsValidSender',
        { sender: $('#txtSender').val() },
        function (result) {
            return (args.IsValid = result.d);
        });
    }
};
 } ());

1 个答案:

答案 0 :(得分:0)

希望我不会太迟。最近有同样的问题。问题是你使用
headers: { '__AntiForgeryToken': config.requestToken }, 但是根据规范,HTML4运行时不支持它:

http://www.plupload.com/docs/Options#runtimes

  

头   一种为每个上传请求传递自定义HTTP标头的方法。该选项是标题名称及其值的简单键/值对集。

     

html4运行时不支持。   在闪存和Silverlight运行时需要特殊的操作模式。

由于在IE8中可以禁用所有其他上传文件的方法,因此它将使用HTML4 runtime,这对于如何设置antiForgery令牌没有任何合法的方法。因此,server-side会认为您的已发送文件不安全,因为它没有antiForgery令牌,并且具有Forbidden HTTP状态。

结论 - 在ASP.NET MVC中如何构建它,你无法在IE8中使用带有plupload的AntiForgery令牌。