Я совершенно новичок в разработке. Поэтому, пожалуйста, прости меня, если я спрошу что-то не так. Я пытаюсь загрузить несколько файлов на веб-сервер. Веб-сервер работает в 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, я не могу отлаживать с точками останова. Я могу получить только выходные данные журнала: (