#java #spring #file-upload
#java #spring #загрузка файла
Вопрос:
У меня есть основной вопрос о проверке размера файла в службе загрузки HTTP-файлов на основе Spring. Я использую Spring org.springframework.web.multipart.MultipartFile
для выполнения загрузки файла.
Мой вопрос в том, multipartFile.getSize()
возвращает ли метод размер только после завершения всей загрузки? Если да, то каков правильный перспективный подход к ограничению файлов на основе размера?
Примечание: Причина, по которой я задаю этот вопрос, заключается в том, что я не хочу, чтобы конечный пользователь загружал файл размером 1 ГБ и через час получал сообщение об ошибке «Извините, максимальный разрешенный размер файла составляет 2 КБ».
Ответ №1:
Ответ на ваш первый вопрос, возвращает ли метод MultipartFile.getSize() размер только после завершения полной загрузки?
-Нет, вы получаете MultipartFile.getSize() перед завершением полной загрузки.
@RequestMapping(value = "/CSVfileupload")
public @ResponseBody String callCSVFileUpload(
@RequestParam("CSVfilepath") MultipartFile multipartFile, HttpSession session,HttpServletRequest request) throws IOException {
//get the file size before doing any operation
logger.info("Controller - callCSVFileUpload() multipartFile.getSize()=" multipartFile.getSize());
InputStream inputStream = new BufferedInputStream(multipartFile.getInputStream());
JsonArray response=null;
try{
//you business logic
}
catch(Exception e){
e.printStackTrace();
}
logger.info(" response.toString()=" response.toString());
return response.toString();
}//end of callCSVFileUpload
Вы можете использовать CommonsMultipartResolver в вас application-context.xml файл.
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="50000000" />
</bean>
Комментарии:
1. Проверяет ли это размер перед передачей файла с клиента на сервер?
2. Нет. Если вы хотите проверить размер перед передачей файла с клиента на сервер, вы должны использовать проверку jquery / javascript.
Ответ №2:
MultipartFile
проверяйте размер файла только на стороне сервера. если вы хотите проверить размер файла во время загрузки, вам нужно использовать клиентскую часть javascript
или jquery
. javascript
или jquery
можно использовать для проверки стороны файла во время загрузки.
$('#myFile').bind('change', function() {
//this.files[0].size gets the size of your file.
alert(this.files[0].size);
});
Ответ №3:
Я думаю, что человек, который с этим работает, должен быть программистом внешнего интерфейса (javascript / h5), который должен проверять размер перед загрузкой пользователем. Затем оператору на стороне сервера необходимо установить некоторые свойства, такие как «maxRequestLength» или «upload_max_filesize» для http-запроса.
Комментарии:
1. Что, если это REST API?