jersey 1.x 实现文件上传和下载。并解决MIME was not found.

开发环境:

      myeclipse10

      jersey 1.19.1

 

1. 文件上传

    @POST
    @Path("/abc")
    @Consumes(MediaType.MULTIPART_FORM_DATA) // 注解必须是这个类型
    @Produces(MediaType.APPLICATION_JSON) //随意
    public Object upload(FormDataMultiPart form) {
        /*
         * form 是请求的form静单全部数据,包含文件信息和其他字段,
         * 获取方式是form.getField("param name");  
         */
        FormDataBodyPart file= form.getField("filename"); // 获取 BodyPart
        InputStream in = file.getValueAs(InputStream.class); // 转为 InputStream

        FormDataContentDisposition   disposition    = filePart.getFormDataContentDisposition();
			
		String s_filename = disposition.getFileName();
        try {
            //解决文件名称为中文时,文件名称乱码的问题
           String body_filename = new String(s_filename.getBytes("ISO8859-1"),"UTF-8");
            /*
             * 这里是保存文件代码和业务逻辑
             */
            

        } catch (Exception e) {
            return xx;
        }
        return xx;
    }

2. 文件下载

 

 @POST   //post和get都可以
    @Path("/xx/{filecode}")
    @Produces(MediaType.APPLICATION_OCTET_STREAM)// 注解必须是这个类型
    public Response getAll(@PathParam(value = "filecode") String filecode) {
        File file = new File("xx/xx/" + filecode);
        // 如果文件不存在,提示404
        if (!file.exists()) {
            return Response.status(Response.Status.NOT_FOUND).build();
        }
        String fileName = null;
        try {
            fileName = URLEncoder.encode(filecode, "UTF-8");
        } catch (UnsupportedEncodingException e1) {
            return xx;
        }
        return  Response
                .ok(file)
                .header("Content-disposition", "attachment;filename=" + fileName)
                .header("Cache-Control", "no-cache").build();
    }

 

 

 

3.遇到的问题

文件上传时,提示

五月 24, 2019 2:45:25 下午 com.sun.jersey.spi.container.ContainerRequest getEntity
严重: A message body reader for Java class com.sun.jersey.multipart.FormDataMultiPart, and Java type class com.sun.jersey.multipart.FormDataMultiPart, and MIME media type multipart/form-data; boundary=--------------------------354795400990427953259745 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.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

 

解决办法:

导入mimepull-1.9.1.jar库(版本必须和jersey保持一致)

 

 

4.参考资料

https://www.jianshu.com/p/0ee2a1bc4573

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值