我制作了一个 taable,它的数据源设置为 BeanItemContainer。每个 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;
}
});
所以getFile从bean中获取字节数组
最佳答案
如果您使用的是 Vaadin 7,则可以使用 FileDownloader此处描述的扩展名:https://vaadin.com/forum#!/thread/2864064
您需要扩展按钮而不是使用点击监听器:
Button l = new Button("Link to pdf");
StreamResource sr = getPDFStream();
FileDownloader fileDownloader = new FileDownloader(sr);
fileDownloader.extend(l);
获取流资源:
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;
}
关于java - 下载文件 vaadin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17413236/