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

 
 
 
         


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM