【问题标题】:Upload files with Zk framework使用 Zk 框架上传文件
【发布时间】:2013-09-25 19:50:32
【问题描述】:

我需要在 ZK 中上传 csv 文件 这是我的 zul 页面:

<zk>
<window
    apply="org.zkoss.bind.BindComposer"
    viewModel="@id('vm') @init('UploadVM')"
    title="win"
    position="center"
    mode="overlapped"
    border="normal"
    width="300px"
    height="200px">
    <button
        label="upload"
        upload="true,maxsize=801192"
        onUpload="@command('uploadFile',upload=event)"
        autodisable="self" />

</window>
</zk>

还有我的 java 页面:

public class UploadVM {
    private Media media;
    public Media getMedia(){
        return media;
    }
    @NotifyChange("media")
    @Command
    public void uploadFile(@ContextParam(ContextType.TRIGGER_EVENT) UploadEvent event) {
        media = event.getMedia();
        media.getStreamData();
    }

但是对于这个简单的例子,我有以下错误:

Use getStringData() instead

我不知道会发生什么。

谁能帮帮我???

【问题讨论】:

    标签: java gridview file-upload upload zk


    【解决方案1】:

    在从中获取数据之前,您应该知道媒体的格式。 根据documentation媒体数据可以是binarytext-based格式。要检索其内容,您应该在前一种情况下使用getByteData()getStreamData(),在后一种情况下使用getStringData()getReaderData()。例如,

    media = event.getMedia();
    if (media.isBinary()) {
        InputStream is = media.getStreamData();
    } else {
        String s = media.getStringData();
    }
    

    【讨论】:

    • 如果我有一个 csv 文件,每行读取一行,我该怎么做?,因为我是否需要 getstream 数据?
    • @user2768380 使用 media.getReaderData() 并用 BufferedReader 包装结果阅读器
    【解决方案2】:

    我有一个最好的例子 dropupload 用于上传 csv 文件,我喜欢它 将帮助您更好地理解。

    index.zul

    <?page title="Auto Generated index.zul"?>
    <window title="Drop here" border="normal" width="100%" height="100%"
        apply="org.zkoss.bind.BindComposer"
        viewModel="@id('vm') @init('com.demo.DropFileViewModel')">
    
        <dropupload maxsize="5120" detection="none"
            onUpload="@command('doUpload')">
        </dropupload>
    
        <button label="Download" onClick="@command('doDownload')"></button>
    
    
    </window> 
    

    DropFileViewModel.java

    package com.demo;
    
    import org.zkoss.bind.BindContext;
    import org.zkoss.bind.annotation.Command;
    import org.zkoss.bind.annotation.ContextParam;
    import org.zkoss.bind.annotation.ContextType;
    import org.zkoss.util.media.Media;
    import org.zkoss.zhtml.Filedownload;
    import org.zkoss.zk.ui.event.UploadEvent;
    import org.zkoss.zul.Messagebox;
    
    public class DropFileViewModel {
        Media media;
    
        @Command
        public void doUpload(@ContextParam(ContextType.BIND_CONTEXT) BindContext ctx) {
            UploadEvent upEvent = null;
            Object objUploadEvent = ctx.getTriggerEvent();
            if (objUploadEvent != null && (objUploadEvent instanceof UploadEvent)) {
                upEvent = (UploadEvent) objUploadEvent;
            }
            if (upEvent != null) {
                media = upEvent.getMedia();
                Messagebox.show("File Uploaded: " + media.getName());
    
            }
        }
    
        @Command
        public void doDownload() {
            if (media != null)
                Filedownload.save(media);
            else
                Messagebox.show("First Drop Your File");
    
        }
    }
    

    check here

    谢谢

    【讨论】:

      【解决方案3】:

      这是我生成PDF文档的解决方案:

      @Command
      @NotifyChange("savePDF")
      public void savePDF() throws IOException, Exception {
      
      File f = new File("PDF_test.pdf");
      OutputStream file = new FileOutputStream(f); 
      
      Document document = new Document();
      PdfWriter.getInstance(document, file);
      
      Filedownload.save(f, "application/pdf");
      
      PdfPTable table=new PdfPTable(3);
      PdfPCell cell .....
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-07-20
        • 1970-01-01
        • 2013-10-25
        • 2016-10-03
        • 2016-07-25
        • 2013-11-09
        • 2017-04-14
        相关资源
        最近更新 更多