選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

DownloadWithPush.java 2.6KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package com.vaadin.tests.resources;
  2. import java.io.IOException;
  3. import java.io.InputStream;
  4. import com.vaadin.annotations.Push;
  5. import com.vaadin.server.DownloadStream;
  6. import com.vaadin.server.Resource;
  7. import com.vaadin.server.StreamResource;
  8. import com.vaadin.server.StreamResource.StreamSource;
  9. import com.vaadin.server.VaadinRequest;
  10. import com.vaadin.tests.components.AbstractTestUIWithLog;
  11. import com.vaadin.ui.Button;
  12. import com.vaadin.ui.Button.ClickEvent;
  13. @Push
  14. public class DownloadWithPush extends AbstractTestUIWithLog {
  15. private static class GeneratedStream extends InputStream {
  16. int read = 0;
  17. int next = 'a';
  18. private final int size;
  19. public GeneratedStream(int size) {
  20. this.size = size;
  21. }
  22. @Override
  23. public int read() throws IOException {
  24. if (available() == 0) {
  25. return -1;
  26. }
  27. read++;
  28. next++;
  29. if (next > 'z') {
  30. next = 'a';
  31. }
  32. return next;
  33. }
  34. @Override
  35. public int available() throws IOException {
  36. return size - read;
  37. }
  38. }
  39. private final class DownloadResoure extends StreamResource {
  40. private DownloadResoure(StreamSource streamSource, String filename) {
  41. super(streamSource, filename);
  42. }
  43. @Override
  44. public DownloadStream getStream() {
  45. DownloadStream ds = super.getStream();
  46. ds.setParameter("Content-Disposition",
  47. "attachment; filename=" + getFilename() + ";");
  48. return ds;
  49. }
  50. }
  51. private Resource hugeFileResource = createResource();;
  52. private int fileSize = 300 * (1024 * 1024);
  53. @Override
  54. protected void setup(VaadinRequest request) {
  55. Button b = new Button("Download a "
  56. + String.format("%.1f", fileSize / 1024.0 / 1024.0) + "MB file",
  57. new Button.ClickListener() {
  58. @Override
  59. public void buttonClick(ClickEvent event) {
  60. getUI().getPage().open(hugeFileResource, "", false);
  61. }
  62. });
  63. addComponent(b);
  64. }
  65. private Resource createResource() {
  66. Resource hugeFileResource = new DownloadResoure(new StreamSource() {
  67. @Override
  68. public InputStream getStream() {
  69. return new GeneratedStream(fileSize);
  70. }
  71. }, "hugefile.txt");
  72. return hugeFileResource;
  73. }
  74. @Override
  75. protected Integer getTicketNumber() {
  76. return 19709;
  77. }
  78. }