2010-05-30 11 views
11

Gwt kullanarak dosya yüklememe ve karşıdan yüklememe izin verecek basit bir proje hazırlıyorum. Sunucumdaki dosyaların indirilmesinde sorun yaşıyorum.Bir Servlet ile Dosya indirirken GWT nasıl kullanılır?

Dosya yükleme işlemi için http://code.google.com/p/gwtupload/ kullanmış ve talimatları takip etmiştir. Dosyam, web sitesi kapsayıcısının (sabit sürücüdeki) sunucusunda saklanır,

Şimdi bir dosyanın indirilmesi söz konusu olduğunda, bir kullanıcının bir indirme düğmesine basmasını istiyorum ve şu anda seçili olan herhangi bir öğe seçilecektir. indirin. Ben gerçekten bu

yapılacaktır dont know how i ben sadece şimdi öyleyim

test etmek için dosyayı almak için bir fileName dize geçecek an için bir indirme sunucu uygulamasını

public class DownloadAttachmentServlet extends HttpServlet { 

@Override 
protected void doPost(HttpServletRequest req, HttpServletResponse resp) 
     throws ServletException, IOException { 
    // TODO Auto-generated method stub 
    super.doGet(req, resp); 
} 

@Override 
protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
     throws ServletException, IOException { 

    String fileName = (String) req.getSession().getAttribute("fileName"); 

    YFUser user = (YFUser) req.getSession().getAttribute(TestServiceImpl.SESSION_USER); 
    if (user == null) 
     throw new ServletException("Invalid Session"); 

    InputStream in = null; 
    OutputStream out = resp.getOutputStream(); 

    FileInputStream fIn = new FileInputStream(fileName); 
    byte[] buffer = new byte[4096]; 
    int length; 
    while ((length = in.read(buffer)) > 0){ 
     out.write(buffer, 0, length); 
    } 
    in.close(); 
    out.flush(); 

} 
} 

gerekiyor biliyorum istemci tarafında ne yapacağını kaybolmuş, ben yukarıdaki basit

public class DownloadFilePanel extends Composite { 


public DownloadFilePanel(final YFUser user , final String fileName){ 

    final Element downloadIframe = RootPanel.get("__download").getElement(); 

    VerticalPanel content = new VerticalPanel(); 
    content.add(new Label("Download For this File : " + fileName)); 

    Button button = new Button("Download"); 
    button.addClickHandler(new ClickHandler(){ 
     @Override 
     public void onClick(ClickEvent event) { 
      // i do not know what to do here 
    }); 
      content.add(button); 
    initWidget(content); 


} 


} 

dayalı bir dosyanın indirilmesini sağlayan bir komisyon tedarik edecek basit bir widget var Bir fileName

Yukarıda görebileceğiniz gibi, ben dosyayı

bana doğru yönde işaret edebilir herhangi biri var indirmek mümkün için ne bilmiyor musunuz?

cevap

11

İstemci tarafında, düzenli bir <a href="path/to/servlet"> etiketi oluşturun. Dinamik olarak oluşturmak istiyorsanız Anchor sınıfını kullanabilirsiniz. Kullanıcı bağlantıyı tıkladığında, tarayıcı dosyayı otomatik olarak indirir.

+0

Tamam, böylece bir çapa kullanabilirim, ancak bunu nasıl download sunucuya bağlayabilirim ve dosya ismini nasıl servlet olarak bir dosya olarak iletebilirim? – molleman

+2

Her sunucuda bir url (web.xml dosyasında belirttiğiniz) var. Bu URL’yi 'href' özniteliğine koymanız yeterlidir. Ayrıca, dosya adı '? Filename = abcd.txt & otherParam = otherValue' gibi bir URL parametresi olarak iletilebilir. Sunucunuzda, 'request.getParameter (" filename ")' ' –

+1

numaralı telefonu arayarak dosya ismini alabilirsiniz. Teşekkürler sri, şu anda çalışıyor – molleman