使用 ember js 并支持 IE8 上传文件的正确方法

Right way to upload files with ember js and with support of IE8

我在将文件从 ember.js 前端上传到 grails 后端时遇到问题。由于支持 IE8,我无法使用任何 ember 插件,例如 ember-uploader。任何建议如何解决这个问题?

BlueImp 的 jQuery 文件上传声称它支持 IE 6+。阅读更多相关信息: https://github.com/blueimp/jQuery-File-Upload

我通过这样的 Ember 组件使用它:

{{file-upload uploadUrl=uploadUrl filename="files" 
    buttonText="Upload files" 
    hiddenName="fileId" hiddenValue=fileId
    uploaded="filesUploaded"}}

并在组件的didInsertElement:

中初始化插件
didInsertElement: function() {
    var self = this;
    this.$('#'+this.get('inputId')).fileupload({
        dataType: 'json',
        url: this.get('uploadUrl'),
        formData: function() {
            return [{name: self.get('hiddenName'), value: self.get('hiddenValue')}];
        },
        done: function(e, data) {
            self.sendAction('uploaded', data.result);
            self.markCompleted(data.result.filenames);
        },
        fail: function (e, data) {
            self.sendAction('failed', data.result);
        },
        add: function(e, data) {
            data.process().done(function () {
                data.submit();
            });
        },
    });

感谢 kielni 的回复,但我使用的方法与您的方法不同。 我使用了这个博客 post 中的解决方案:Cross-browser AJAX uploads with Ember.js and mOxie

以及对我有用的组件代码:

var fileInput = new mOxie.FileInput({
            browse_button: this.$('.file-pick-button').get(0),
            multiple: false
        });

        fileInput.onchange = function (e) {
            var file = fileInput.files[0];
            var reader = new mOxie.FileReader();
            reader.onloadend = function () {
                ajax({
                    type: "POST",
                    timeout: 5000,
                    url: config.serverURL + '/files/',
                    data: {
                        transportID: id,
                        filename: file.name,
                        file: reader.result
                    }
                });
            };
            reader.readAsBinaryString(file);
        };
        fileInput.init();