Весенняя загрузка HTTP-файла: проверка размера файла

#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?