java之jersey实现单个,多个文件上传
前台传入的file需要用对象FormDataBodyPart的List来接收,然后通过循环取出每个对象,进而得到文件名称等其他信息,相关代码如下:
- 接收前台传的file:
@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Path("/docuUpload")
public ResultEntity uploadDocuments(
@FormDataParam("docuName") String docuName,
@FormDataParam("docuExpire") String docuExpire,
@FormDataParam("files") List<FormDataBodyPart> upload
){
- for循环取出每个对象:
String fileName = null;
for(FormDataBodyPart p : upload){
fileName = p.getContentDisposition().getFileName();//获取文件名称
try {
if(null!=fileName){
fileName=new String(fileName.getBytes("ISO8859-1"),"UTF-8");//中文乱码
info("fileName="+fileName);
}
- 将文件写入服务器的代码,例为通过工具类进行调用:
//FilePath为将文件存储至某个文件夹的绝对路径
public static List<String> FileWrite( List<FormDataBodyPart> upload,String FilePath,String fileName){
File fileDir = new File(FilePath);
List<String> fileAbNames = new ArrayList<>();
if(!fileDir.exists()){
fileDir.mkdirs();
}
for (FormDataBodyPart p : upload) {
InputStream in=p.getValueAs(InputStream.class);
String filePath = FilePath+File.separatorChar+fileName;
File osFile = new File(filePath);
if(!osFile.exists()){
try {
osFile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
FileOutputStream os = null;
try {
os = new FileOutputStream(osFile);
byte[] buff = new byte[1024*1024];
int buffRead;
while((buffRead = in.read(buff))>0){
os.write(buff,0,buffRead);
}
os.flush();
fileAbNames.add(fileName);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
in.close();
os.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return fileAbNames;//返回的是文件的绝对路径
}
以上就是通过jersey实现单个或者多个文件的上传,希望能帮助到大家,不好的地方也希望评论区批评指正。
其他博客:
批量文件处理之 根据文件后缀名实现自动分类