使用ExtJS和Jersey上传文件

时间:2014-03-17 08:38:53

标签: java extjs file-upload extjs4 jersey

我有一个基于ExtJS的应用程序,我想上传一个文件,一个图像,通过Restful with 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表单没有发送任何内容,我需要更改/添加什么?

如果您需要更多代码,请询问。

提前致谢!

编辑: 我正在使用名为Postman的Chrome扩展程序对其进行测试,这些是请求的配置:

邮递员测试:

Accept: application/json
Content-type: multipart/form-data
Cache-Control: no-cache
Url: http://localhost/app/icon/upload
Method: POST
File: Mine.doc

我在项目中添加了一些罐子,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

问候。

1 个答案:

答案 0 :(得分:0)

显然在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;
}

问候。

相关问题