FormDataMultiPart获取表单文件的大小

    在完成springboard某个功能时遇到个问题,前端表单上传了个文件,服务端接收的是FormDataMultiPart,希望通过FormDataMultiPart拿到上传文件的size。
    一开始获取文件的InputStream拿,但是InputStream真正实例是org.jvnet.mimepull.DataHead.ReadMultiStream,ReadMultiStream没有实现available方法,所以拿不到file size;后面尝试在FormDataContentDisposition里面拿,也拿不到;最后找了一些网站文章,研究了一下源码,发现可以获取服务器临时缓存文件的java.io.File实例,这里可以拿到size

测试代码:

@Transactional
@POST
@Path("/upload")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.MULTIPART_FORM_DATA)
public FileUploadResultDto upload(FormDataMultiPart formData) {
    try {
	CommonLogic.checkLoginFromSessionAndThrowException(request);
	List filePartList = FileLogic.filterInvalidFile(formData.getFields("addFile"));
	for (FormDataBodyPart filePart : filePartList) {
	    InputStream inputStream = filePart.getValueAs(InputStream.class);
	    System.out.println("InputStream size:" + inputStream.available());

	    FormDataContentDisposition disposition = filePart.getFormDataContentDisposition();
	    System.out.println("disposition size:" + disposition.getSize());

            java.io.File file = filePart.getValueAs(java.io.File.class);
	    System.out.println("File size:" + file.length());
	}
	return null;
	} catch (IOException e) {
			throw new RuntimeException("???");
	}
}

打印结果:
InputStream size:0
disposition size:-1
File size:3979

总结:
FormDataMultiPart获取file的FormDataBodyPart,通过FormDataBodyPart.getValueAs(java.io.File.class)方法拿到ava.io.File实例,File.length()就是上传文件的size
posted @ 2020-03-31 16:28  乳鸽菌  阅读(3327)  评论(0编辑  收藏  举报