처음에는 컨텍스트를 설명하려고합니다. 나는 관련 일에서 자료를 가진 반환 파일을 클릭하는 단추가있다. 버튼을 클릭하면 DB에 질의 (date to-to와 함께)를 수행하고 데이터를 적절한 형식으로 파싱하고 StreamResource
을 FileDownloader
으로 반환합니다. 모든 수업은 Vaadin
패키지입니다.FileDownloader - 브라우저에 의존하는 다른 동작
Button btExport = new Button("Export");
FileDownloader fileDownloader = new FileDownloader(getReportsStream());
fileDownloader.extend(btExport);
//update resource to download on click
btExport.addClickListener(event -> {
fileDownloader.setFileDownloadResource(getReportsStream());
});
Chrome 및 IE 브라우저에서 모두 정상적으로 작동합니다. Mozilla에서는 Firefox가 그렇지 않습니다. Firefox 브라우저에서는 항상 이전 StreamResource
객체를 반환합니다. 같은 파일을 항상 반환합니다. 파이어 폭스처럼 캐시에서 가져 오는 것 같습니다. 왜냐하면 로그에서 Firefox에 대한 이벤트 클릭을 찾을 수 없기 때문입니다. Chrome 및 IE 로그가 존재합니다.
모든 브라우저가 최신입니다. Vaadin
버전 : 7.7.6
이유가 궁금하십니까? 또는 파일 다운로드를 위해 다른 방법으로 무엇을 할 수 있습니까?
편집 ///
나는 해결책을 찾았지만 임시 나도 몰라. 브라우저를 다시 설치 한 후 이상한 행동이 더 이상 발생하지 않습니다. 며칠 째 작동이 잘된다면 해결책으로 생각합니다.
버튼에 클릭 수신기를 추가 할 필요가 없으면 fileDownloader.extend (btExport)로 충분해야합니다. –
@Chris M 'StreamResource'와 같은 데이터가 동적으로 변경되지 않는 경우 (새로 고침 페이지 없음) 충분합니다. 필자의 경우 필자가 쓴 것처럼 선택한 날짜에 따라 데이터가 변경되었으므로 버튼 클릭시 '신선한 데이터'를 'StreamResource'로 입력해야합니다. – newOne
서버 측 클릭 수신기는 다운로드가 시작된 후가 아니라 이전에 실행됩니다. 내가 아는 가장 좋은 해결 방법은'우선 FileDownloader.getFileDownloadResource' 또는'FileDownloader.handleConnectorRequest' 거기 스트림 생성 로직을 가지고있다 '''자바 공공 자원 getFileDownloadResource() { setFileDownloadResource (getReportsStream()); return super.getFileDownloadResource() } ''' –