Estoy creando un proyecto simple que me permitirá cargar y descargar archivos usando gwt. Tengo problemas con la descarga de archivos que están en mi servidor.¿Cómo usar GWT al descargar archivos con un servlet?
Para la carga de archivos utilicé http://code.google.com/p/gwtupload/ y seguí las instrucciones allí. Mi archivo está almacenado en el servidor fuera del contenedor del sitio web (en el disco duro),
Ahora cuando se trata de la descarga de un archivo, quiero que el usuario presione un botón de descarga y cualquier elemento que esté seleccionado se descargar. Realmente no sé cómo esto se hará
Sé que necesito un servlet descarga
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();
}
}
por el momento yo sólo voy a pasar una cadena de nombre de archivo para recuperar el archivo para probar
ahora estoy perdido en lo que debe hacer en el lado del cliente, tengo una sencilla
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);
}
}
anterior es un simple widget que proporcionará un panel que permitirá la descarga de un archivo basado en un nombre de archivo
como se puede ver arriba, no sé qué hacer para ser capaz de descargar el archivo
¿hay alguien que me puede apuntar en la dirección correcta?
OK, así que puedo usar un ancla, pero ¿cómo podría vincular esto con el servlet de descarga y cómo también pasaría el nombre del archivo como una cadena al servlet? – molleman
Cada servlet tiene una url (la que especifique en su web.xml). Solo necesita poner esa URL en el atributo 'href'. Además, el nombre del archivo se puede pasar como un parámetro de URL como '? Filename = abcd.txt & otherParam = otherValue'. En su servlet, puede obtener el nombre del archivo llamando 'request.getParameter (" filename ")' –
gracias sri, funciona bien ahora – molleman