2013-01-11 27 views
5

के बाद फ़ाइलें डाउनलोड तो क्या मैं तीन कॉलम, एक चेकबॉक्स स्तंभ उन जो फाइलें वे डाउनलोड करने के लिए चाहते हैं की जांच की अनुमति देता है, जिनमें से एक के साथ एक DataView है।विकेट: एक ऑनसबमिट

सादगी की खातिर के लिए (मुझे लगता है कि); मैंने फ़ाइलों को एक ज़िप फ़ाइल में संपीड़ित करने का निर्णय लिया है और इसे उत्पन्न होने के बाद इसकी सेवा की है।

यहाँ मैं अब तक है:

कोड::


Button downloadLogButton = new Button("downloadlogbutton") { 
     private static final long serialVersionUID = 1L; 
     @Override 
     public void onSubmit() { 
      // Some utility class I made that zips files 
      LogUtility util = new LogUtility(); 
      util.zipLogFiles("sample", logs); 
     } 
    }; 

    Form logsForm = new Form("logsform") { 

    }; 

    logsForm.add(downloadLogButton); 

    CheckGroup<File> checkGroup = new CheckGroup<File>("logscheckgroup", new ArrayList<File>()); 
    WebMarkupContainer logsViewContainer = new WebMarkupContainer("datatable"); 
    DataView<File> logsView = new DataView<File>("logrows", new ListDataProvider<File>(logs)) { 

     private static final long serialVersionUID = 1L; 

     public void populateItem(final Item<File> item) { 
      final File file = (File) item.getModelObject(); 
      item.add(new Check<File>("logdownloadcheck", item.getModel())); 
      item.add(new Label("logname", file.getName())); 
      SimpleDateFormat sdf = new SimpleDateFormat("E, dd MMM yyyy hh:mm a"); 
      item.add(new Label("logdatemodified", sdf.format(file .lastModified()))); 
     } 
    }; 

    logsViewContainer.add(logsView); 
    checkGroup.add(logsViewContainer); 
    logsForm.add(checkGroup); 
    add(logsForm); 

मैं कैसे ज़िप फ़ाइल के बाद यह डाउनलोड के लिए उत्पन्न होता है की सेवा करते हैं? मेरे विकल्प क्या हैं? मैं उन्हें एक पुष्टिकरण पृष्ठ या Your download is ready पृष्ठ पर रीडायरेक्ट करने के लिए होने से बचने के लिए करना चाहते हैं।

अद्यतन

जावी लोपेज जवाब के आधार पर, मैं अपने Button के onSubmit समारोह में निम्नलिखित कोड जोड़ा।

org.apache.wicket.util.file.File log = new org.apache.wicket.util.file.File("/home/keeboi/Downloads/sample.zip"); 

IResourceStream resourceStream = new FileResourceStream(log); 
IRequestHandler target = new ResourceStreamRequestHandler(resourceStream); 

getRequestCycle().scheduleRequestHandlerAfterCurrent(target); 

और मुझे HTTP Error 404: Not Found मिल रहा है।

उत्तर

5

आप DownloadLink की तरह ही कर सकते हैं और ज़िप्ड फ़ाइल से FileResourceStream बना सकते हैं।

Button downloadLogButton = new Button("downloadlogbutton") { 
    private static final long serialVersionUID = 1L; 
    @Override 
    public void onSubmit() { 
     // Some utility class I made that zips files 
     LogUtility util = new LogUtility(); 
     util.zipLogFiles("sample", logs); 
     IResourceStream resourceStream = new FileResourceStream(
      new org.apache.wicket.util.file.File(someFile)); // Use whatever file you need here 
     IRequestTarget t = new ResourceStreamRequestTarget(stream){ 
      @Override 
      public String getFileName() { 
       return "filename.zip"; 
      } 
     } 
     getRequestCycle().setRequestTarget(t); 
    } 
}; 

आप डाउनलोड करने के बाद फ़ाइल को नष्ट करना चाहता था, तो आप IRequestTarget#respond(RequestCycle) इस तरह रद्द कर सकते थे: फिर, बस वर्तमान अनुरोध चक्र के लक्ष्य को बदलने के

@Override 
public void respond(RequestCycle requestCycle) { 
    super.respond(requestCycle); 
    // Delete the file 
    ((FileResourceStream)getResourceStream()).getFile().delete(); 
} 

निम्नलिखित संबंधित सवाल भी कर सकते थे उपयोगी रहें: How to use Wicket's DownloadLink with a file generated on the fly?

+1

चूंकि मैं विकेट 1.5 का उपयोग कर रहा हूं, मैंने इसे ऐसा किया: 'org.apache.wicket.util.file.File log = new org.apache.wicket.util.file.File ("/home/keeboi/डाउनलोड/sample.zip "); IResourceStream resourceStream = नए FileResourceStream (लॉग इन करें); IRequestHandler लक्ष्य = नए ResourceStreamRequestHandler (resourceStream); getRequestCycle() scheduleRequestHandlerAfterCurrent (लक्ष्य)। ' लेकिन मुझे 'HTTP त्रुटि 404 मिल रहा है: नहीं मिला' –

+0

ठीक है, मेरी उपयोगिता कक्षा में एक गलती थी। धन्यवाद! –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^