Size: a a a

2021 January 21

ES

Evgeny Sanevich in pro.jvm
Andrei Legan
выставил, 0 реакции
Это очень странно, во всех примерах в интернете отлично это работает и с inputStream, и с HttpServletRequest, да и у меня в своё время работало. Тупое уточнение: ты работаешь с body POST запроса ведь?
источник

AL

Andrei Legan in pro.jvm
Evgeny Sanevich
Это очень странно, во всех примерах в интернете отлично это работает и с inputStream, и с HttpServletRequest, да и у меня в своё время работало. Тупое уточнение: ты работаешь с body POST запроса ведь?
вот примерный код
<form id="verFileForm" enctype="multipart/form-data" action="uploadVersion" method="POST">
  <input type="file" name="versionFile">
  <input type="number" name="appId" th:value="${appid}" style="display: none">
  <input type="number" name="versionId" th:value="${version.getId()}" style="display: none">
</form>


$.ajax({
           url : post_url,
           type: request_method,
           data : form_data,
           contentType: false,
           cache: false,
           processData:false,
           xhr: function() {
               var xhr = $.ajaxSettings.xhr();
               xhr.upload.onprogress = function(e) {
                   jQuery('#progress').attr("style","");
                   jQuery('#progress-bar').css("width",e.loaded / e.total *100 + "%");
                   jQuery('#progress-bar').html(Math.ceil(e.loaded / e.total *100) + "%");
                   console.log(Math.floor(e.loaded / e.total *100) + '%');
               };
               return xhr;
           },
           success: function(data){
               // делать что-то при успешном завершении...
               doneFunction(data);
               jQuery('#progress').attr("style","display: none");
           }
       });
источник

AL

Andrei Legan in pro.jvm
эээ может убрать enctype="multipart/form-data"
источник

ES

Evgeny Sanevich in pro.jvm
Andrei Legan
вот примерный код
<form id="verFileForm" enctype="multipart/form-data" action="uploadVersion" method="POST">
  <input type="file" name="versionFile">
  <input type="number" name="appId" th:value="${appid}" style="display: none">
  <input type="number" name="versionId" th:value="${version.getId()}" style="display: none">
</form>


$.ajax({
           url : post_url,
           type: request_method,
           data : form_data,
           contentType: false,
           cache: false,
           processData:false,
           xhr: function() {
               var xhr = $.ajaxSettings.xhr();
               xhr.upload.onprogress = function(e) {
                   jQuery('#progress').attr("style","");
                   jQuery('#progress-bar').css("width",e.loaded / e.total *100 + "%");
                   jQuery('#progress-bar').html(Math.ceil(e.loaded / e.total *100) + "%");
                   console.log(Math.floor(e.loaded / e.total *100) + '%');
               };
               return xhr;
           },
           success: function(data){
               // делать что-то при успешном завершении...
               doneFunction(data);
               jQuery('#progress').attr("style","display: none");
           }
       });
Ты шлешь мультипарт
источник

ES

Evgeny Sanevich in pro.jvm
Andrei Legan
эээ может убрать enctype="multipart/form-data"
Надо переделать фронт код. Теперь ты не можешь слать несколько полей в body
источник

ES

Evgeny Sanevich in pro.jvm
Andrei Legan
вот примерный код
<form id="verFileForm" enctype="multipart/form-data" action="uploadVersion" method="POST">
  <input type="file" name="versionFile">
  <input type="number" name="appId" th:value="${appid}" style="display: none">
  <input type="number" name="versionId" th:value="${version.getId()}" style="display: none">
</form>


$.ajax({
           url : post_url,
           type: request_method,
           data : form_data,
           contentType: false,
           cache: false,
           processData:false,
           xhr: function() {
               var xhr = $.ajaxSettings.xhr();
               xhr.upload.onprogress = function(e) {
                   jQuery('#progress').attr("style","");
                   jQuery('#progress-bar').css("width",e.loaded / e.total *100 + "%");
                   jQuery('#progress-bar').html(Math.ceil(e.loaded / e.total *100) + "%");
                   console.log(Math.floor(e.loaded / e.total *100) + '%');
               };
               return xhr;
           },
           success: function(data){
               // делать что-то при успешном завершении...
               doneFunction(data);
               jQuery('#progress').attr("style","display: none");
           }
       });
Можно например отправлять всю метадату про файл в хедерах, а сам файл - в body. И не через <form>
источник

AL

Andrei Legan in pro.jvm
Evgeny Sanevich
Можно например отправлять всю метадату про файл в хедерах, а сам файл - в body. И не через <form>
ну или в GET параметрах передам, сейчас попробую
источник

ES

Evgeny Sanevich in pro.jvm
Andrei Legan
ну или в GET параметрах передам, сейчас попробую
Запрос должен быть POST. Это называется requestparams тогда
источник

AL

Andrei Legan in pro.jvm
Evgeny Sanevich
Запрос должен быть POST. Это называется requestparams тогда
ну типа да :) запрос пост, а параметры в URL я это имел в виду
источник

ES

Evgeny Sanevich in pro.jvm
Andrei Legan
ну типа да :) запрос пост, а параметры в URL я это имел в виду
А честность работы бэкенда лучше сперва проверить postman’ом или curl’ом
источник

DM

Dmitrii Maslov in pro.jvm
Andrei Legan
да дело ведь не в том как распарсить то что приходит, я хочу сам учавствовать в процессе приёма данных , а тут опять же // Check that we have a file upload request
boolean isMultipart = ServletFileUpload.isMultipartContent(request); , это использовать нужно в нутри метода ... а там уже всё в буфере
если отключить спринговый мультипарт резолвер (spring.servlet.multipart.enabled=false) и сделать как описано по ссылке, то ничего буферизироваться не будет
источник

AL

Andrei Legan in pro.jvm
spring.servlet.multipart.enabled=false
—————————————————————————
               <form id="verFileForm" th:action="${'uploadVersion/'+appid+'/'+version.getId()}" method="POST">
                   <input type="file" name="versionFile">
—————————————————————————
   @PostMapping(value="/admin/uploadVersion/{appId}/{versionId}")
   public @ResponseBody String uploadVersion(@PathVariable("appId") int appId, @PathVariable("versionId") int versionId, InputStream versionFile) {
—————————————————————————-
Один фиг я попадаю в метод только после ПОЛНОЙ загрузки файла
источник

DM

Dmitrii Maslov in pro.jvm
Andrei Legan
spring.servlet.multipart.enabled=false
—————————————————————————
               <form id="verFileForm" th:action="${'uploadVersion/'+appid+'/'+version.getId()}" method="POST">
                   <input type="file" name="versionFile">
—————————————————————————
   @PostMapping(value="/admin/uploadVersion/{appId}/{versionId}")
   public @ResponseBody String uploadVersion(@PathVariable("appId") int appId, @PathVariable("versionId") int versionId, InputStream versionFile) {
—————————————————————————-
Один фиг я попадаю в метод только после ПОЛНОЙ загрузки файла
Вот вообще не знаю будет ли c InputStream работать, попробуй заменить InputStream -> HttpServletRequest
источник

AL

Andrei Legan in pro.jvm
Dmitrii Maslov
Вот вообще не знаю будет ли c InputStream работать, попробуй заменить InputStream -> HttpServletRequest
тоже самое
источник

ES

Evgeny Sanevich in pro.jvm
Andrei Legan
spring.servlet.multipart.enabled=false
—————————————————————————
               <form id="verFileForm" th:action="${'uploadVersion/'+appid+'/'+version.getId()}" method="POST">
                   <input type="file" name="versionFile">
—————————————————————————
   @PostMapping(value="/admin/uploadVersion/{appId}/{versionId}")
   public @ResponseBody String uploadVersion(@PathVariable("appId") int appId, @PathVariable("versionId") int versionId, InputStream versionFile) {
—————————————————————————-
Один фиг я попадаю в метод только после ПОЛНОЙ загрузки файла
Можно без <form> посылать файл?
источник

DM

Dmitrii Maslov in pro.jvm
Хз тогда, попробуй на чистом пет проекте попробовать, если там заработает, то смотри отличия с твоим кодом. Но у меня точно такое работало
источник

AL

Andrei Legan in pro.jvm
Народ я лох , я оставил в настройках это
@Bean
   MultipartConfigElement multipartConfigElement() {
       MultipartConfigFactory factory = new MultipartConfigFactory();
       factory.setMaxFileSize("512MB");
       factory.setMaxRequestSize("512MB");

       return factory.createMultipartConfig();
   }
источник

D

Dima in pro.jvm
источник

D

Dima in pro.jvm
источник

D

Dima in pro.jvm
источник