2017-11-14 14 views
1

내 시나리오는 다음과 같습니다. Vaadin 7.7.10을 클릭하면 생성 된 파일을 클릭 생성 후 다운로드 할 수 있습니다.Vaadin 7 - 동적으로 생성 된 파일의 즉석 다운로드

생성자 메서드가 있는데, 이는 byte[] (필요한 경우 OutputStream으로 쉽게 수정할 수 있음)을 반환하고, StreamResource을 만듭니다. 그래서 리소스를 다운로드 할 준비가되었지만 이제는 무엇을해야합니까?

FileDownloader과 접근 방식을 사용할 수 없다고 생각합니다. 확장 된 버튼을 실제로 클릭하기 전에 페이지가 표시 될 때마다 파일을 생성해야하기 때문입니다. (그러고 싶지는 않습니다. 요구에 따라 사용해야하는 매우 비싼 작업).

나는 Page.getCurrent().open(streamResource, null, false)를 사용하여 원하는 효과를 얻을 수 있었다, 그러나 Resource 인수 .open는 7 Vaadin이 있기 때문에 사용되지 않습니다, 그래서

어떤 해결 방법 또는 다른 접근 방법이 있나요 ... 싶어하지 않습니다에 의존 이?

+3

FileDownloader를 사용하여 클릭 할 때 왜 파일을 생성 할 수 없습니까? 당신이 StreamSource를 구현하는 커스텀 클래스를 만들었다면 _ 생각한다. getStream 메서드를 재정의하고 거기에서 파일 생성을 수행 할 수 있습니까? – Jay

+0

이 스레드를보세요 : https://vaadin.com/forum#!/thread/2864064 –

+1

맞아요, Jay. StreamSource 커스텀 클래스를 onClick 이벤트 안에 넣었 기 때문에 혼란 스러웠습니다. 그래서 "헤이, 클릭 한 후에 만 ​​발생하지만 실제 클릭하기 전에 FileDownloader를 확장해야합니다"와 같았습니다. 내가해야 할 일은 생성자 코드를 생성자 안에 넣은 다음 FileDownloader를 확장하는 것입니다. 그런 다음 올바르게 작동합니다. – Ellrohir

답변

1

Vaadin FileDownloader 일부 맞춤 설정으로이 문제를 처리 할 수 ​​있습니다. 그러나 한때 나는 다른 접근 방식으로보고 시스템을 만들었습니다. 아이디어는 구성자 매개 변수로 StreamResource을 취하는 구성 요소 BrowserFrame을 사용하는 것입니다.

파일 생성이 시작됩니다 (예 : 버튼 클릭). 생성이 완료되면 byte[]이됩니다. 에서 StreamSource을 작성한 다음 StreamResouce을 작성한 후 BrowserFrame의 내용으로 사용합니다.

마지막으로이 BrowserFrame이 브라우저에 반응하는 어딘가에 추가됩니다.

필자의 경우 매개 변수화 된 PDF 보고서를 생성해야 사용자가 먼저 미리보고 필요할 때 다운로드 할 수 있습니다. 나는 byte[]을 제공 한 PDF 생성기를 사용했다. 파일 이름 확장자 .pdf의 브라우저 인식 유형 및 미리보기 & 다운로드 용 PDF 플러그인 열림.

byte[]에 이진 물건을 넣고 BrowserFrame을 만들고 적절한 파일 이름 확장명을 설정할 수 있습니다.

파일이 준비 될 때 백그라운드에서 파일이 생성되고 BrowserFrame 구성 요소가 첨부되는 동안 진행률 표시기가있는 등 일부는입니다.