从 AbstractDefaultAjaxBehavior 中的请求中检索多部分数据

Retrieve the multipart data from the request inside a AbstractDefaultAjaxBehavior

我正在尝试创建一个组件以将 CKEditor 与 Apache Wicket 结合使用。我在 CKEditor 中添加了一个插件来将图像发送到服务器。为此,我使用了客户端给出的示例:

CKEditor: Custom image upload adapter

对于服务器端,我创建了这个 Java 代码:

add(new AbstractDefaultAjaxBehavior() {
        @Override
        protected void updateAjaxAttributes(final AjaxRequestAttributes attributes) {
            super.updateAjaxAttributes(attributes);
            attributes.setMethod(Method.POST);
            attributes.setMultipart(true);
            attributes.setDataType("json");
        }

        @Override
        protected void respond(final AjaxRequestTarget target) {

            // Avoid the redirect (302)
            final RequestCycle requestCycle = getRequestCycle();
            requestCycle.scheduleRequestHandlerAfterCurrent(null);

            // Return the picture URL
            final WebResponse response = (WebResponse) RequestCycle.get().getResponse();
            response.setStatus(200);
            response.setContentType("application/json");
            response.write("{ \"url\": \"http://localhost:8080/image/foobar.jpg\"}");
        }

        @Override
        public void renderHead(final Component component, final IHeaderResponse response) {
            super.renderHead(component, response);
            final String callbackUrl = getCallbackUrl().toString();
            response.render(JavaScriptHeaderItem.forScript("ckeditorCallbackUrl = '" + callbackUrl + "';",
                    "ckeditorCallbackUrl"));
        }
    });

但是在响应方法中,我不知道如何访问带有图像的多部分数据。

如何检索此表单数据?

谢谢。

您可以通过以下方式阅读文件:

ServletWebRequest webRequest = (ServletWebRequest) RequestCycle.get().getRequest();
MultipartServletWebRequest multiPartRequest = webRequest.newMultipartWebRequest(getMaxSize(), "ignored");
multiPartRequest.parseFileParts();
Map<String, List<FileItem>> files = multiPartRequest.getFiles();

您可以在 http://wicketinaction.com/2012/11/uploading-files-to-wicket-iresource/

阅读更多相关信息