在完成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); ListfilePartList = 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