ExtJS Spring загрузка файла

У меня есть панель ext ext, которая включает в себя элемент загрузки файла. Код показан ниже:

fp = new Ext.FormPanel({
         fileUpload: true,
         autoHeight: true,
         bodyStyle: 'padding: 10px 10px 0 10px;',
         labelWidth: 50,
         defaults: {
             anchor: '95%',
             allowBlank: false,
             msgTarget: 'side'
         },
         items: [
            {
                xtype: 'fileuploadfield',
                id: 'form-file',
                emptyText: 'Select excel file',
                fieldLabel: 'File',
                name: 'file',
                buttonText: 'Choose File',
                buttonCfg: {
                    iconCls: 'upload-icon'
                }
            }
         ],
         buttons: [{
            text: 'Load',
             handler: function(){                   
                if(fp.getForm().isValid()){
                  fp.getForm().submit({
                      url: myURL,
                      waitMsg: 'Uploading your photo...',
                      success: function(fp, o){
                        // I want to get loaded excel data list
                      },
                      failure : function(fp,o)
                      {
                        console.log('error');
                      }
                  });
                 }
             }
         }]
     });    

У меня есть Spring Controller и некоторые сервисы для работы с загруженными данными Excel. После загрузки Excel я перебираю данные поверх Excel и помещаю их в список.

@RequestMapping("/uploadExcel")
@ResponseBody
public Map<String, ? extends Object> uploadExcellData(@RequestParam("file") MultipartFile file)
{
    Map<String, Object> result = new HashMap<String,Object>();
    try
    {
        result = uploadService(file);
    }
    catch(Exception ex)
    {
        logger.error(ex.getMessage(), ex);
    }

    return result;
}

public Map<String,Object> uploadService(MultipartFile argFile) throws BLOException, DAOException 
{
    Map<String,Object> result = new HashMap<String,Object>(3);

    List importExcelList = null;
    try 
    {
        if (!argFile.isEmpty()) 
        {   
            importExcelList = parseExcelAndCreateListFunction(argFile.getInputStream());

            result.put("total", new Integer(importExcelList.size()));
            result.put("success", true);

            result.put("data", importExcelList);
        }
    } 
    catch (IOException e) 
    {
        logger.error(e.getMessage(), e);
    }

    return result;
}

Когда я запускаю этот код, я получаюNetworkError: 404 Not Found". Я хочу вернуть список данных Excel после отправки формы. Я не смог этого сделать. Как я могу получить список данных Excel при обратном вызове отправки?

2 ответа

Решение

Я обновил файл Java, как это:

@RequestMapping("/uploadExcel")
@ResponseBody
public void uploadExcellData(@RequestParam("file") MultipartFile file, HttpServletResponse response)
{
    Map<String, Object> result = new HashMap<String,Object>();
    try
    {
        result = uploadService(file);
    }
    catch(Exception ex)
    {
        logger.error(ex.getMessage(), ex);
    }

    response.setContentType("text/html; charset=UTF-8");
    response.getWriter().write("{success:true, total:'"+result.size()+"', data:'"+result+"'}");

}

public List uploadService(MultipartFile argFile) throws BLOException, DAOException 
{
    List importExcelList = null;
    try 
    {
        if (!argFile.isEmpty()) 
        {   
            importExcelList = parseExcelAndCreateListFunction(argFile.getInputStream());
        }
    } 
    catch (IOException e) 
    {
        logger.error(e.getMessage(), e);
    }

    return importExcelList;
}

А также я обновил свой файл js следующим образом:

fp = new Ext.FormPanel({
   fileUpload: true,
   autoHeight: true,
   bodyStyle: 'padding: 10px 10px 0 10px;',
   labelWidth: 50,
   defaults: {
       anchor: '95%',
       allowBlank: false,
       msgTarget: 'side'
   },
   items: [
      {
          xtype: 'fileuploadfield',
          id: 'form-file',
          emptyText: 'Select excel file',
          fieldLabel: 'File',
          name: 'file',
          buttonText: 'Choose File',
          buttonCfg: {
              iconCls: 'upload-icon'
          }
      }
   ],
   buttons: [{
      text: 'Load',
       handler: function(){                   
          if(fp.getForm().isValid()){
            fp.getForm().submit({
                url: myURL,
                waitMsg: 'Uploading your photo...',
                success: function(fp, o){
                    var resData = Ext.util.JSON.decode(o.result.data);
                    // I can iterate resData
                },
                failure : function(fp,o)
                {
                    Ext.MessageBox.alert("Failure", "your error message");
                }
            });
           }
       }
   }]
});    

Я решил свою проблему, как я сказал выше.

Я думаю, вам нужно вернуть дополнительный параметр и проверить success метод action параметр. Пожалуйста, проверьте Extjs Docs (action.result).

Другие вопросы по тегам