近期有个很早的项目需要做一个公开接口,并且允许支持文件,表单属性的传参,发现项目中使用的是jersey,之前也没用过,在传参的时候出现了很多问题,记录一下,方便下次使用。
1:文件上传时,如果只是上传文件,不需要其他属性的话,可以直接接收流,接收的方式为:
@Path("/test")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public void test(@FormDataParam("filename") String filename,@FormDataParam("file") InputStream fileInputStream) {
String imageName = filename+".jpg";
File file = new File("/e:/image/" + imageName);
try {
//使用common io的文件写入操作
FileUtils.copyInputStreamToFile(fileInputStream, file);
//原来自己的文件写入操作
/veFile(fileInputStream, file);
} catch (IOException ex) {
ex.printStackTrace();
}
}
第一个参数可以接收文件名,但是只能在POSTman的form-data中提交成功,在前台ajax提交时,会显示乱码;具体原因不是很清楚,不过将@FormDataParam 改为 @Multipart在前台就可以正常传入数据
2:多文件与多字段共同传入方式
@POST
@Path("/test1")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public void test1(@Multipart("filename") String filename,@Multipart( "file") InputStream uploadedInputStream,
@Multipart( "id") String id ,@Multipart("file") InputStream input){
}
jersey框架中,亲测可接收到数据,希望对其他人会有一些帮助,项目中引入的jar包版本为:jersey-media-multipart-2.25