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).