В настоящее время я реализую функциональность для загрузки файлов с использованием отдыха из джерси. Я хотел бы установить максимально допустимый размер файла, который мне кажется довольно распространенным требованием.
Мой первый подход состоял в том, чтобы использовать Jerseys FormDataContentDisposition, которая должна содержать всю информацию, которая мне может понадобиться о файле. Но вся информация, кроме имени файла, по-видимому, отсутствует, включая размер файла.
Это мой метод отдыха:
@POST
@Path("uploadFile/")
@Consumes("multipart/form-data")
@Produces("text/html")
public String handleDocumentUpload(
@FormDataParam("file") InputStream uploadedInputStream,
@FormDataParam("file") FormDataContentDisposition fileDetail)
{
if(fileDetail.getSize() > MAX_FILE_SIZE)
{
throw new IllegalArgumentException(
"File is to big! Max size is " + MAX_FILE_SIZE);
}
// ...more file handling logic
}
Что не работает, поскольку возвращаемый размер всегда равен «-1»!
Я использую чрезвычайно простую HTML-форму для загрузки файла:
<html>
<head>
<title>File upload</title>
</head>
<body>
<p>Choose file</p>
<form enctype="multipart/form-data" method="POST" action="uploadFile">
<input type="file" name="file" size="50">
<input type="submit" value="Upload">
</form>
</body>
</html>
Так что теперь к моему вопросу; Как бы вы применили ограничение размера файла с помощью трикотажа? Должен быть какой-то простой способ, не прибегая к чтению всего файла в память (ByteArray), а затем получая действительный размер, верно?