使用FileDownloader时,lazily detemine文件名

kun*_*foo 2 java download vaadin

在vaadin 7中,如何在使用时懒惰地确定文件名FileDownloader

final Button downloadButton = new Button("Download file");
FileDownloader downloader = new FileDownloader(new StreamResource(new StreamSource() {
    @Override
    public InputStream getStream () {
        return new ByteArrayInputStream(expesiveCalculationOfContent());
    }
}, "file.snub"));

downloader.extend(downloadButton);
Run Code Online (Sandbox Code Playgroud)

在此代码示例中,清楚地显示文件名

  1. 是垃圾
  2. 必须尽早知道.

如何懒惰地确定下载文件的文件名?

Raú*_*udo 9

我不知道它是否是脏的但是这样做:扩展FileDownloader.handleConnectorRequest()以在调用其super方法之前调用StreamResource.setFilename().

    {
        final Button downloadButton = new Button("Download file");
        final StreamResource stream = new StreamResource(
                new StreamSource() {
                    @Override
                    public InputStream getStream() {
                        return new ByteArrayInputStream("Hola".getBytes());
                    }
                }, "badname.txt");
        FileDownloader downloader = new FileDownloader(stream) {
            @Override
            public boolean handleConnectorRequest(VaadinRequest request,
                    VaadinResponse response, String path)
                    throws IOException {
                stream.setFilename("better-name.txt");
                return super
                        .handleConnectorRequest(request, response, path);
            }
        };

        downloader.extend(downloadButton);
        layout.addComponent(downloadButton);
    }
Run Code Online (Sandbox Code Playgroud)