1

因为使用zk上传组件上传图片,然后将图片的上下文路径插入CKEditor太复杂,

http://ckeditor.com/demo可以看到 CKEditor 可以上传图片和 flash 等,

但是在 zk 中,CKEditor 没有这个功能,

这是否意味着 zk 中的 CKEditor 无法上传文件?

4

1 回答 1

1

恐怕这对 zk 是不可能的。

我写了一个解决方法来做到这一点。您必须向您的 GUI 添加一个按钮并将此 EventListener 添加到该按钮:

private class onUpload implements EventListener
{
    @Override
    public void onEvent(Event event) throws Exception
    {
        Media media = ((UploadEvent) event).getMedia();

        if (media.getContentType().contains("image"))
        {
            reader.upload(media.getStreamData(), media.getName());

            String description = edDescription.getValue();
            description += "<img alt=\"\" src=\"/" + media.getName() + "\" />";
            edDescription.setValue(description);
        }
        else
        {
            new Messagebox().show(_T("You can only upload images!"), _T("Not an image!"), Messagebox.OK, Messagebox.ERROR);
        }
    }
}

Reader 是我的类,它处理文件传输并用于将数据写入 docroot。在我的例子中,glassfish 3.1 的 docroot 可以使用以下代码定位。我为 ist 编写了 getDocFolder() 方法,因为它还会为每个用户添加子文件夹(如果它们不存在)。

 File file = new File("../docroot/");

这是阅读器上传方法的代码:

InputStream inputStream = null;

    try
    {
        inputStream = new ByteArrayInputStream(imageStream);
        String filename = getDocFolder()+"/"+imageName;

        File file = new File(filename);
        OutputStream out=new FileOutputStream(file);
        byte buf[]=new byte[1024];
        int len;

        while((len = inputStream.read(buf)) > 0)
            out.write(buf,0,len);

        out.close();
        inputStream.close();
    } 
    catch (Exception ex)
    {
        Logger.getLogger(ImageReader.class.getName()).log(Level.SEVERE, "Error writing image", ex);
    } 
    finally
    {
        try
        {
            inputStream.close();
        } 
        catch (IOException ex) {}
    }

我希望这有帮助

于 2011-09-25T17:56:33.027 回答