下载文件vaadin

abd*_*003 4 java web-applications bytearray file vaadin

我创建了一个将其数据源设置为BeanItemContainer的taable.每个bean都有一个名称(String)和一个byte [],它保存一个转换为byte []的文件.我为每一行添加了一个按钮,假设首先将其转换为pdf,即可下载该文件.我在实现下载部分时遇到问题,这里的代码是相关的:

public Object generateCell(Table source, Object itemId,
                Object columnId) {
            // TODO Auto-generated method stub
            final Beans p = (Beans) itemId;

            Button l = new Button("Link to pdf");
            l.addClickListener(new Button.ClickListener() {

                @Override
                public void buttonClick(ClickEvent event) {
                    // TODO Auto-generated method stub

                    try {
                        FileOutputStream out = new FileOutputStream(p.getName() + ".pdf");
                        out.write(p.getFile());
                        out.close();

                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            });
            l.setStyleName(Reindeer.BUTTON_LINK);

            return l;
        }


    });
Run Code Online (Sandbox Code Playgroud)

所以getFile从bean中获取字节数组

小智 8

如果您使用的是Vaadin 7,可以使用FileDownloader扩展,如下所述:https://vaadin.com/forum#!/ thread/2864064

而不是使用clicklistener,您需要扩展按钮:

Button l = new Button("Link to pdf");
StreamResource sr = getPDFStream();
FileDownloader fileDownloader = new FileDownloader(sr);
fileDownloader.extend(l);
Run Code Online (Sandbox Code Playgroud)

要获取StreamResource:

private StreamResource getPDFStream() {
        StreamResource.StreamSource source = new StreamResource.StreamSource() {

            public InputStream getStream() {
                // return your file/bytearray as an InputStream
                  return input;

            }
        };
      StreamResource resource = new StreamResource ( source, getFileName());
        return resource;
}
Run Code Online (Sandbox Code Playgroud)

  • 注意:在初始化filedownloader 之前文件必须存在。 (2认同)