Есть такой код ajax вызова -
this.ajaxGetJsonAndReady = function(type, url, data, onSuccess, processData, contentType) {
$.ajax({
url: "/api/" + url,
type: type,
dataType: "json",
data: data,
processData: processData,
contentType: contentType,
success: function(json) {
if (json.error) {
error(json.error);
} else {
onSuccess(json.data);
ready();
}
},
error: function() {
error();
}
});
}
В него передаю data отсюда -
var reader = new FileReader();
reader.readAsArrayBuffer($(this)[0].files[0]);
var array = new Uint8Array(reader.result);
//var binaryString = String.fromCharCode.apply(null, array);
var data = {};
data.test = array;
utils.ajaxGetJsonAndReady("GET", "fileUpload", data, function (processData) {
}, true, 'application/x-www-form-urlencoded');
Серверная часть: web.xml:
<servlet>
<servlet-name>servlet</servlet-name>
<servlet-class>web.framework.core.Servlet</servlet-class>
<init-param>
<param-name>configurationClass</param-name>
<param-value>web.config.ServletConfigurationImpl</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>servlet</servlet-name>
<url-pattern>/api/*</url-pattern>
<url-pattern>/ui2/*</url-pattern>
</servlet-mapping>
Servlet (сюда приходит все не так, как ожидается):
public class Servlet extends HttpServlet {
protected ServletConfiguration configuration;
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
try {
//noinspection unchecked
val configClass = (Class<ServletConfiguration>) Class.forName(config.getInitParameter("configurationClass"));
this.configuration = configClass.newInstance();
} catch (Exception e) {
throw new ServletException(e);
}
}
@Override
protected void service(HttpServletRequest hrq, HttpServletResponse hre) {
RequestMethod method;
RequestHandler handler;
try {
method = RequestMethod.valueOf(hrq.getMethod());
String uri = getRequestUri(hrq);
val pathParams = new HashMap<String, String>();
val params = hrq.getParameterMap(); // Вот здесь должны быть корректные параметры.
handler = configuration.uriToHandlerMapper.createHandler(method, uri, pathParams, params);
if (handler == null) {
sendError(hrq, hre, HttpServletResponse.SC_NOT_FOUND);
return;
}
if (!handler.acceptMethods.contains(method)) {
throw new Exception("Request method is not acceptable");
}
//noinspection unchecked
handler.params = configuration.requestParamsParser.parse(pathParams, hrq.getParameterMap(), handler);
} catch (Throwable e) {
log.error("Request dispatcher or parameter parser failed, responding error 400", e);
sendError(hrq, hre, HttpServletResponse.SC_BAD_REQUEST);
return;
}
try {
handler.requestMethod = method;
handler.httpServletRequest = hrq;
handler.httpServletResponse = hre;
handler.execute();
hre.flushBuffer();
} catch (Throwable e) {
log.error("Request handler failed, responding error 500", e);
sendError(hrq, hre, HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
}
@SuppressWarnings("WeakerAccess")
protected String getRequestUri(HttpServletRequest hrq) {
String uri = hrq.getServletPath();
String pathInfo = hrq.getPathInfo();
if (pathInfo != null) {
uri += pathInfo;
}
return uri;
}
@SuppressWarnings("WeakerAccess")
protected void sendError(HttpServletRequest hrq, HttpServletResponse hre, int status) {
try {
val handler = configuration.uriToHandlerMapper.createErrorHandler(hrq, status);
handler.httpServletRequest = hrq;
handler.httpServletResponse = hre;
handler.execute();
hre.flushBuffer();
} catch (Throwable e2) {
// createErrorHandler() failed, I/O error, or response is already committed. Nothing we can do.
}
}
Но на сервер приходит массив параметров, а не один параметр с именем test. Что я делаю не так? Поправки и уточнения приветствуются!
Так же ищу другие работающие способы передать файл на сервер.
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Как задать вопрос или написать личное сообщение непосредственно зарегистрированному участнику, если я знаю, что некто может ответить на мой...
На данный вопрос уже ответили:
код запроса на клиенте , тестирую на локалке (подключаюсь к localhost:4000) :