ExtJS4 Загрузка файла - Как получить содержимое моего файла, а не только местоположение - PullRequest
0 голосов
/ 09 января 2012

Я знаю, как создать форму, которая просматривает и выбирает файл, это не мой вопрос. Что мне нужно, это получить содержимое выбранного файла, отправить его на сервер и обработать его. Пока я могу получить только местоположение файла.

Я думаю, будет лучше, если я получу свой файл на стороне клиента (extjs), а затем отправлю его на сервер, но я не знаю, как это сделать.

{
    xtype: 'fileuploadfield',
    hideLabel: true,
    emptyText: 'Select a file to upload...',
    id: 'upfile',
    //name:'file',
    width: 220
},
buttons:
[
    {
        text: 'Upload',
        handler: function () {
            obj.Import(Ext.getCmp('upfile').getValue())
        }
    }
]

Import(...) - это функция моего сервера. Мне нужно дать ему файл, а не только его путь !!

Заранее спасибо за ваше время

Ответы [ 2 ]

5 голосов
/ 09 января 2012

AFAIK Ext не использует HTML5 File API, поэтому получение файлового содержимого на стороне JS не является простым. Вероятно, самый простой способ добиться этого - создать собственный обработчик. Например:

{
    xtype: 'fileuploadfield',
    hideLabel: true,
    emptyText: 'Select a file to upload...',
    id: 'upfile',
    //name:'file',
    width: 220
},
buttons:
[
    {
        text: 'Upload',
        handler: function () {
            var file = Ext.getCmp('upfile').getEl().down('input[type=file]').dom.files[0]; // fibasic is fileuploadfield
            var reader = new FileReader();
            reader.onload = (function(theFile) {
                return function(e) {
                    obj.Import(e.target.result);
                };
            })(file);
            reader.readAsBinaryString(file);
        }
    }
]
0 голосов
/ 09 января 2012

То, что вы делаете Ext.getCmp('upfile').getValue() явно передает местоположение файла в метод импорта. Как вы ожидаете содержание файла тогда? Чтобы загрузить файл, вам необходимо отправить форму ExtJS. Вы можете сделать что-то вроде этого:

handler: function() {

        form.submit({
                url: '/Gallery/Upload',
                waitMsg: 'Uploading your file...',
                success: function(form, action) {
                    alert('File form done!');
                }
            });
        }
    }

А на стороне сервера:

   public void ProcessRequest(HttpContext context)
{
    HttpPostedFile fileupload = context.Request.Files["file"];

    // process your fileupload...

    context.Response.ContentType = "text/plain";
    context.Response.Write("Ok");
}

Обновление: Вам необходимо раскомментировать свойство name вашего fileuploadfield.

...