Я сделал отдых api, он работает нормально, но я хочу прочитать размер файла, и я использовал приведенный ниже код для чтения размера файла
@POST
@Path("/test")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response upload( FormDataMultiPart form ){
System.out.println(" size of file="+ filePart.getContentDisposition().getSize());
}
Но я получил размер файла -1.
Может ли кто-нибудь предложить мне, как я могу прочитать фактический размер файла.
Но используя
System.out.println(" data name ="+ filePart.getContentDisposition().getFileName());
Я получил правильное имя файла.
3 ответа
Надеюсь, это то, что вы хотели. Я проверил это в своей системе. Это печатает размер файла в байтах.
@POST
@Path("/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadFile(@FormDataParam("file") InputStream uploadedInputStream, @FormDataParam("file") FormDataContentDisposition fileDetail) {
String uploadedFileLocation = "/home/Desktop/" + fileDetail.getFileName();
// save it
writeToFile(uploadedInputStream, uploadedFileLocation);
File file = new File(uploadedFileLocation);
System.out.println(file.length() + " in bytes");
String output = "File uploaded to : " + uploadedFileLocation;
return Response.status(200).entity(output).build();
}
// save uploaded file to new location
private void writeToFile(InputStream uploadedInputStream, String uploadedFileLocation) {
try {
OutputStream out = new FileOutputStream(new File(uploadedFileLocation));
int read = 0;
byte[] bytes = new byte[1024];
out = new FileOutputStream(new File(uploadedFileLocation));
while ((read = uploadedInputStream.read(bytes)) != -1) {
out.write(bytes, 0, read);
}
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Убедитесь, что в вашем pom.xml есть следующая зависимость
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-multipart</artifactId>
<version>2.13</version>
</dependency>
Также добавьте это в свой класс приложения, который расширяет конфигурацию ресурсов. Это регистрирует ваш класс с трикотажем как имеющий составной контент.
super(YourClass.class, MultiPartFeature.class);
Попробуйте использовать HttpServletRequest. Пожалуйста, смотрите документацию для получения более подробной информации.
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response putFile(@Context HttpServletRequest request){
Part part = request.getPart("filename");
long fileSize = part.getSize();
}
Прежде всего, я думаю, что лучший способ ограничить размер данных - это установить конфигурацию сервера. См. Соответствующую ссылку.
Во-вторых, поскольку он поставляется с Stream, он подходит к EOF или подобному. Это означает, что вы не можете сразу найти размер.
В-третьих, однако, одним из альтернативных способов оценки размера в трикотажной ткани является использование размера содержимого HTTP-заголовка. Сервер получает заголовок Content-Length в первую очередь, чтобы узнать размер тела. @Context HttpServletRequest request
имеет метод request.getContentLength()
. Но поскольку он состоит из нескольких частей, вам нужно быть осторожным, чтобы размер тела имел сумму данных с накладными расходами протокола (разделитель / информация о содержимом)
Удачи
Похожие вопросы
Связанные вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.