【问题标题】:Custom ckeditor fileUpload in java with apache fileUpload parseRequest returns empty list使用apache fileUpload parseRequest在java中自定义ckeditor fileUpload返回空列表
【发布时间】:2015-12-08 19:56:36
【问题描述】:

我有一个 seam 2.2.2 应用程序,我正在尝试自定义 ckeditor fileUpload 插件。

我想出的解决办法是:

1) 为所有具有 'editor' 样式类的元素初始化编辑器:

var elements = CKEDITOR.document.find('.editor');
for(var i = 0; i< elements["$"].length; i++){
        CKEDITOR.replace(elements["$"][i], {
            filebrowserUploadUrl: rootPath + "/cops/filebrowserUploadUrl.seam"
        });
    }

2) 设置filebrowserUploadUrl.seam,除了执行什么都不做:

#{attachmentController.sendImageToServer()}

3) 使用 apache commons fileUpload 实现后端:

public void sendImageToServer()
{       
    HttpServletRequest request = ServletContexts.instance().getRequest();
    DiskFileItemFactory factory = new DiskFileItemFactory();

    File repository = (File) request.getAttribute("javax.servlet.context.tempdir");
    factory.setRepository(repository);
    ServletFileUpload upload = new ServletFileUpload(factory);

    try
    {
        List<FileItem> items = upload.parseRequest(request);
        processItems(items); //set the file data to specific att
        saveOpenAttachment(); //save the file to disk
    }

这个方法可以调用。我可以在请求中调试上传参数(带有一些二进制数据),但 upload.parseRequest(request) 返回一个空列表。我已经搜索了这个问题,我做了我能做的一切,但我无法判断应用程序自定义 FaceletViewHandler 是否导致了这个问题。 虽然如果我能找到这个问题的解决方案我会非常满意,但我觉得这不是一个好的解决方案。也许 Seam 与 facelets 的集成可以给我一个更好的解决方案。我真的不知道。 有什么建议吗?

【问题讨论】:

  • 我通过在 bean 上执行 List items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request) 并设置 在我的 components.xml 中。但仍有疑问:任何其他 url 模式都会崩溃。有谁知道为什么?

标签: java file-upload ckeditor seam apache-commons


【解决方案1】:

最终解决方案类似于 Seam 多部分过滤器处理请求:

ServletRequest request = (ServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
try
{
  if (!(request instanceof MultipartRequest))
  {
     request = unwrapMultipartRequest(request);
  }

  if (request instanceof MultipartRequest)
  {
     MultipartRequest multipartRequest = (MultipartRequest) request;

     String clientId = "upload";
     setFileData(multipartRequest.getFileBytes(clientId));
     setFileContentType(multipartRequest.getFileContentType(clientId));
     setFileName(multipartRequest.getFileName(clientId));
     saveOpenAttachment();
  }
}

现在我像 Seam 一样处理请求,并且不需要破坏其他类型请求的 web:multipart-filter 配置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-02
    • 2017-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多