文件下载上传功能很少会用到,但每次用的时候,都忘了之前是怎么实现和处理异常的,这次记下来,免得以后又得重新弄
1. 文件上传
@POST
@Path("/xxx")
@Consumes(MediaType.MULTIPART_FORM_DATA) // 注解必须是这个类型
public Object upload(FormDataMultiPart form) {
/*
* form 是请求的form静单全部数据,包含文件信息和其他字段,
* 获取方式是form.getField("param name");
*/
FormDataBodyPart fuck= form.getField("fuck");
FormDataBodyPart file= form.getField("filename"); // 获取 BodyPart
String filename = file.getContentDisposition().getFileName(); // 获取原始文件名
InputStream in = file.getValueAs(InputStream.class); // 转为 InputStream
try {
//解决文件名称为中文时,文件名称乱码的问题
filename = new String(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();
}