开发环境:
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