Я безуспешно пытаюсь загрузить файл (excel) с помощью ExtJs и Spring, поэтому надеюсь, что вы мне поможете. На панели у меня есть кнопка (поле загрузки файла), и с ее помощью я выбираю файл, который хочу загрузить.
.
.
,{
xtype: 'fileuploadfield',
buttonOnly: true,
hideLabel: true,
buttonText: "Importuoti excel failą",
border: false,
itemId: "uploadBtn",
name: 'file'
},
.
.
Это мой контроллер. Каждый раз, когда я выбираю файл с полем загрузки файла, он активирует функцию uploadFile ().
init: function() {
var me = this;
this.listen({
'#uploadBtn': {
'change': function(fld, value) {
console.log(value);
this.getTurtasPanel().setLoading(true, true);
if(value != ""){
me.uploadFile();
fld.reset();
}
}
},
})
Функция uploadFile.
uploadFile: function(){
var fp = Ext.create('Ext.form.Panel', {
fileUpload: true,
autoHeight: true,
bodyStyle: 'padding: 10px 10px 0 10px;',
labelWidth: 50,
method: 'POST',
defaults: {
anchor: '95%',
allowBlank: false,
msgTarget: 'side'
}
})
if(fp.getForm().isValid()){
fp.getForm().submit({
url: Turtas.Properties.getServicePath()+'/save/' + record.data.resource,
headers: {'Content-Type':'multipart/form-data; charset=UTF-8'},
})
}
},
И контроллер Spring:
@RequestMapping(value="turtas/save/gelezinkeliai", method=RequestMethod.POST)
public @ResponseBody void saveGelezinkeliaiFromExcel(@RequestParam("file") MultipartFile file){
System.out.println(file);
}
И ошибка, которую я получаю:
Request processing failed; nested exception is org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; nested exception is java.io.IOException: org.apache.tomcat.util.http.fileupload.FileUploadException: the request was rejected because no multipart boundary was found
the request was rejected because no multipart boundary was found
Я думаю, проблема в моем запросе на стороне клиента. Я думаю, что мой запрос не прикрепляет файл, который я хочу загрузить. Я попытался установить заголовки на стороне клиента как undefined, но затем тип содержимого становится «application / json», и я получаю сообщение об ошибке, что запрос не является составным. Так что не так с моим кодом? Очень надеюсь, что кто-нибудь поможет мне разобраться в этой проблеме. Заранее спасибо !
Обновить
Спасибо @Lorenz Meyer за ответ, но теперь у меня другая ошибка:
java.lang.IllegalArgumentException: ваш InputStream не был ни потоком OLE2, ни потоком OOXML
я немного изменил свой исходный код.
@RequestMapping(value="turtas/save/gelezinkeliai", method=RequestMethod.POST)
public @ResponseBody void saveGelezinkeliaiFromExcel(@RequestParam("file") MultipartFile file){
System.out.println(file.getContentType());
System.out.println(file.getSize());
System.out.println(file.getName());
System.out.println(file.getOriginalFilename());
System.out.println(file.isEmpty());
}
Вывод:
application/octet-stream
0
file
true
Со стороны клиента я не включаю параметры, а со стороны сервера я запрашиваю один параметр (параметр файла), возможно, это проблема. Ошибка говорит, что я выбираю файлы плохого формата, хотя я выбираю .xlsx или .xls, и возникает та же ошибка.