У меня есть приложение на основе ExtJS, и я хочу загрузить файл, изображение через Restful с помощью Jersey, но я не могу этого сделать, возможно ли это. Это часть моего кода:
Посмотреть:
.
.
.
items: [{
xtype: 'filefield',
name: 'iconBmp',
fieldLabel: this.i18nColIconBmp,
enforceMaxLength : true,
labelWidth: 100,
msgTarget: 'side',
anchor: '100%',
buttonText: 'Exam'
}],
buttons: [{
text: 'Upload',
handler: function() {
var form = this.up('form').getForm();
if (form.isValid()) {
form.submit({
url: 'icon/upload',
waitMsg: 'Uploading...',
success: function(fp, o) {
Ext.Msg.alert('Success', o.result.file + ' has been uploaded.');
}
});
}
}
}]
Ява:
@Path("icon")
public class CatIconRest {
@POST
@Path("/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadFIle(
@FormDataParam("file") InputStream uploadedInputStream,
@FormDataParam("file") FormDataContentDisposition fileDetail) {
String string = fileDetail.getFileName();
System.out.println(string );
// TODO:
return null;
}
}
Дело в том, что я никогда не добираюсь до класса Java, форма ExtJS ничего не отправляет, что мне нужно изменить/добавить?
Если вам нужно больше кода, просто спросите.
Заранее спасибо!
EDIT: Я тестирую его с расширением chrome, называемым Postman, и это конфигурация запроса:
Тест почтальона:
Accept: application/json
Content-type: multipart/form-data
Cache-Control: no-cache
Url: http://localhost/app/icon/upload
Method: POST
File: Mine.doc
Я добавил несколько jars в проект, jersey-multipart-1.17.1.jar и mimepull-1.9.3.jar, но я не могу проверить его с расширением, и это то, что я получаю:
A message body reader for Java class com.sun.jersey.core.header.FormDataContentDisposition, and Java type class com.sun.jersey.core.header.FormDataContentDisposition, and MIME media type multipart/form-data was not found.
The registered message body readers compatible with the MIME media type are:
*/* ->
com.sun.jersey.core.impl.provider.entity.FormProvider
com.sun.jersey.core.impl.provider.entity.MimeMultipartProvider
com.sun.jersey.core.impl.provider.entity.StringProvider
com.sun.jersey.core.impl.provider.entity.ByteArrayProvider
com.sun.jersey.core.impl.provider.entity.FileProvider
com.sun.jersey.core.impl.provider.entity.InputStreamProvider
com.sun.jersey.core.impl.provider.entity.DataSourceProvider
com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General
com.sun.jersey.core.impl.provider.entity.ReaderProvider
com.sun.jersey.core.impl.provider.entity.DocumentProvider
com.sun.jersey.core.impl.provider.entity.SourceProvider$StreamSourceReader
com.sun.jersey.core.impl.provider.entity.SourceProvider$SAXSourceReader
com.sun.jersey.core.impl.provider.entity.SourceProvider$DOMSourceReader
com.sun.jersey.json.impl.provider.entity.JSONJAXBElementProvider$General
com.sun.jersey.json.impl.provider.entity.JSONArrayProvider$General
com.sun.jersey.json.impl.provider.entity.JSONObjectProvider$General
com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General
com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General
com.sun.jersey.core.impl.provider.entity.XMLRootObjectProvider$General
com.sun.jersey.core.impl.provider.entity.EntityHolderReader
com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider$General
com.sun.jersey.json.impl.provider.entity.JSONListElementProvider$General
com.sun.jersey.json.impl.provider.entity.JacksonProviderProxy
Приветствую.
По-видимому, проблема с зависимостью в pom.xml и неверно сконфигурировала метод, я оставляю его кому-то еще, если вы могли бы помочь:
@POST
@Path("/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces({ MediaType.APPLICATION_JSON })
public ServiceResponse uploadFIle(FormDataMultiPart form) {
byte[] fileContents = form.getField("iconBmp").getValueAs(byte[].class);
String uploadedfilename = form.getField("iconBmp").getContentDisposition().getFileName();
String description = form.getField("description").getValue();
String fileName = form.getField("fileName").getValue();
//String id = form.getField("id").getValue();
// TODO:
//catIconBean.uploadIcon(fileContents);
ServiceResponse sr = new ServiceResponse();
sr.httpResponse = true;
return sr;
}
Приветствую.