Как получить файл из SlingHttpServletRequest? - PullRequest
0 голосов
/ 07 ноября 2018

Я совершенно новичок в разработке. Поэтому, пожалуйста, прости меня, если я спрошу что-то не так. Я пытаюсь загрузить несколько файлов на веб-сервер. Веб-сервер работает в Adobe Enterprise Manager. У меня есть страница JSP, которая отправляет мою форму через AJAX-вызов сервлету как SlingHttpServletRequest .

Моя JSP-страница вместе с AJAX CALL:

<div class="content">
        <form method="POST" action="/servletpath" enctype="multipart/form-data" id="form-id">
              <table>
                        <tr>
                            <td><label>...</label></td>
                            <td>
                            <select id="id1">
                              <option value="option1">option1</option>
                              <option value="option2">option2</option>
                              <option value="option3">option3</option>
                              <option value="option4">option4</option>
                            </select>
                            </td>
                        </tr>
                        <tr>
                            <td><label>...</label></td>
                            <td>
                                <select id="id2">
                                  <option value="option1">option1</option>
                              <option value="option2">option2</option>
                              <option value="option3">option3</option>
                              <option value="option4">option4</option>
                                </select>
                            </td>
                        </tr>
                        <tr>
                            <td><label>Choose Files</label></td>
                            <td><input id="fileInput" type="file" name="uploadingFiles" onchange="updateSize();" multiple>
                                selected files: <span id="fileNum">0</span>;
                                total size: <span id="fileSize">0</span></td>
                        </tr>
                        <tr>
                            <td><input type="submit" value="Upload files" onclick="uploadFiles()"></td>
                            <td><input type="button" value="Start Comparison" onclick="location.href='/startComparison'"></td>
                        </tr>
                        </table>
                </form>

               <script type="text/javascript">
                    var uploadFiles =  function () {
                    alert("inside uploadFiles");

                    var formData = new FormData();
                    formData = formData.append("file1",document.getElementById("fileInput").files[0].name);
                    alert("appended file..."+document.getElementById("fileInput").files[0].name);

                    var statusWin = CQ.Ext.Msg.wait("Processing request", "Uploading Files...");
                         CQ.Ext.Ajax.request({
                                url: CQ.HTTP.externalize("/servletpath"),
                                method: "POST",
                                processData:false,
                                contentType:false,
                                scope: this,
                                params: {
                                    "file1":document.getElementById("fileInput").files[0],
                                    "file2":document.getElementById("fileInput").files[1]
                                },
                                success:...,
                                failure: function (response) {
                                    if (statusWin.isVisible()){
                                         statusWin.hide();
                                       }
                                       alert("Response Body :: "+response);
                                       alert("Response Status :: "+response.status);
                                }
                            });
                        }
               </script>
    </div>

Класс сервлета:

@SlingServlet(paths="/servletPath", methods = "POST", metatype=true)
public class SampleServlet extends SlingAllMethodsServlet {

    @Reference
    private ResourceResolverFactory resolverFactory;


    protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response)
            throws IOException,ServletException {

        log.info("I am inside POST method of Sample Servlet");
        log.info("SlingHTTPRequest content type is :: "+request.getContentType());
        log.info("getParamter Attached file is :: "+request.getParameter("file1"));


        }
        boolean isMultipart = org.apache.commons.fileupload.servlet.ServletFileUpload.isMultipartContent(request);

        log.info("Is this a Multipart Request :: "+isMultipart);

    }

Выход журнала:

  • Я нахожусь внутри метода POST сервлета образца
  • Тип содержимого SlingHTTPRequest: :: :: application / x-www-form-urlencoded; charset = UTF-8 getParamter
  • Прикрепленный файл: :: [объектный файл]
  • Это многокомпонентный запрос :: false

Я попробовал следующие подходы, но не работал

  • https://helpx.adobe.com/experience-manager/using/uploading-files-aem1.html -> Это использует вызов jquery ajax для загрузки файла, но Chrome не поддерживает его. Так что не в состоянии преследовать это.

  • Попытка получить файлы из формы, используя document.getElementById ("fileInput"). Файлы [i] затем добавили его в объект FormData (), а затем отправили его. Но все еще не знаю, как извлечь файл из объекта запроса.

ВОПРОСЫ:

  • Даже если я отправляю запрос как Multipart, проверка isMultipart всегда возвращает мне false в методе doPOST внутри сервлета.

  • request.getParameter (String) возвращает строку, и я не уверен, как получить объект файла

  • request.getParameter ("file2") возвращает [объектный файл] . Не уверен, как извлечь файл из этого

Я действительно застрял, ребята. Любая помощь или любое направление будет высоко ценится. Поскольку весь мой код работает на AEM, я не могу отлаживать с точками останова. Я могу получить только выходные данные журнала: (

...