在完成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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/10482.html
標籤:其他
上一篇:docker:快速學習基礎使用
