代码之家  ›  专栏  ›  技术社区  ›  Łukasz Bownik

如何通过按钮点击GWT下载文件?

gwt
  •  5
  • Łukasz Bownik  · 技术社区  · 14 年前

    我有一个提供文件的服务台?

    我正在使用GWT构建一个带有“下载”按钮的页面。

    如何让GWT客户机在onClick事件中下载文件?

    4 回复  |  直到 14 年前
        1
  •  13
  •   Perdi Estaquel    12 年前

    如果你有文件地址。您可以打开如下窗口:

    downloadButton.addClickHandler(new ClickHandler() {
    
        @Override
        public void onClick(ClickEvent event) {
            Window.open("http://127.0.0.1:8888/file.rar", "_self", "enabled");
        }
    });
    

    javadoc可以帮助你 http://google-web-toolkit.googlecode.com/svn/javadoc/2.1/com/google/gwt/user/client/Window.html#open%28java.lang.String,%20java.lang.String,%20java.lang.String%29

        2
  •  2
  •   Chloe    11 年前

    我喜欢

    Window.Location.replace("/downloadServlet");
    
        3
  •  1
  •   user1733035    10 年前

    上面所有的解决方案都不适合我,然后我意识到我已经有了一个可行的实现。我是这样做的:

    Window.open(fileUrl, "_parent", "");
    

    但关键在于servlet:

    response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
    

    此解决方案不会打开新窗口,而是直接打开“另存为”对话框。两全其美。

        4
  •  0
  •   opalenzuela    11 年前

    使用GWT、apachepoi下载.xls文件的完整示例

        Environment : GWT SDK 2.4
        Spring 3.0.2M
        JAVA : 1.7
    

    exportButton.addClickHandler文件(新建ClickHandler(){

    @Override
    public void onClick(ClickEvent event) {
         String link = GWT.getModuleBaseURL() + "myfiledownload";
         Window.open(link , "", "");
        }//onClick
    });//addClickHandler
    

    网站.xml

        <servlet>
            <servlet-name>fileDownload</servlet-name>
            <servlet-class>com.sbabamca.server.FileDownloadServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>fileDownload</servlet-name>
            <url-pattern>/app/myfiledownload</url-pattern>
        </servlet-mapping>
    

    在中执行代码之后网站.xml控件尝试执行名为FileDownloadServlet的servlet

    服务器端

        FileDownloadServlet.java
        ------------------------    
    
        package com.sbabamca.server;
    
        import javax.servlet.http.HttpServlet;
        import javax.servlet.http.HttpServletRequest;
        import javax.servlet.http.HttpServletResponse;
        import javax.servlet.ServletException;
        import org.apache.poi.hssf.usermodel.HSSFRow;
        import org.apache.poi.hssf.usermodel.HSSFSheet;
        import org.apache.poi.hssf.usermodel.HSSFWorkbook;
        import org.hibernate.Query;
        import org.hibernate.Session;
        import org.hibernate.SessionFactory;
        import org.hibernate.Transaction;
        import org.hibernate.metadata.ClassMetadata;
        import com.fpix.hibernate.util.HibernateUtil;
        import com.fpix.util.date.MyDate;
        import java.io.IOException;
        import java.util.ArrayList;
    
        public class MyFileServlet extends HttpServlet {
        SessionFactory sessionFactory;
        Session session;
        Transaction tx = null;
    
    
            @SuppressWarnings({ "unchecked", "deprecation" })
            protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
                    resp.setContentType("application/vnd.ms-excel");
                    resp.setHeader("Content-Disposition", "attachment; filename=users.xls");
                    try {
    
                        sessionFactory = HibernateUtil.getSessionFactory();
                        if(!sessionFactory.getCurrentSession().isOpen())
                        {
                            session = sessionFactory.openSession();
                        }
                        else
                        {
                        session = sessionFactory.getCurrentSession();
                        }
                        tx = session.beginTransaction();
                        tx.begin();
    
                        Query qry = session.createQuery("from com.fpix.dto.User u ");
                        ArrayList<com.fpix.dto.User> u = (ArrayList<com.fpix.dto.User>)qry.list();
    
                        Query qry1 = session.createQuery("from com.fpix.dto.Profile p ");
                        ArrayList<com.fpix.dto.Profile> p = (ArrayList<com.fpix.dto.Profile>)qry1.list();
    
                        /*
                         * code to get the column name of User and Profile Entity
                         */
                        ClassMetadata cm = sessionFactory.getClassMetadata(com.fpix.dto.User.class);
                        String userAttributes[] = cm.getPropertyNames();
    
                        ClassMetadata cm1 = sessionFactory.getClassMetadata(com.fpix.dto.Profile.class);
                        String profileAttributes[] = cm1.getPropertyNames();
    
                         HSSFWorkbook wb = new HSSFWorkbook();
                         HSSFSheet sheet = wb.createSheet("Excel Sheet");
                         HSSFRow rowhead = sheet.createRow((short) 0);
    
                         rowhead.createCell((short) 0).setCellValue("id");
                         /*
                          * code to create the columns names in .xls file
                          */
                         int j = 0;
                         for(int i=0;i<userAttributes.length;i++){
                             j = i;
                             if(!userAttributes[i].equalsIgnoreCase("profileData") )
                                     rowhead.createCell((short) ++j).setCellValue(userAttributes[i]);
                            }//for
    
                         for(int i=0;i<profileAttributes.length;i++){
                             if(!profileAttributes[i].equalsIgnoreCase("userData"))
                                rowhead.createCell((short) ++j).setCellValue(profileAttributes[i]);
                         }//for
    
    
                         int index = 1;
                         for(int i=0;i<u.size();i++){
                                 HSSFRow row = sheet.createRow((short) index);
    
                                 row.createCell((short) 0).setCellValue(u.get(i).getId());
                                 row.createCell((short) 1).setCellValue(u.get(i).getUser());
                                 row.createCell((short) 2).setCellValue(u.get(i).getPassWord());
                                 row.createCell((short) 3).setCellValue(u.get(i).getType());
                                 row.createCell((short) 4).setCellValue(u.get(i).getRole());
                                 row.createCell((short) 5).setCellValue(u.get(i).getProfile());
                                 row.createCell((short) 6).setCellValue(u.get(i).getEmail());
                                 row.createCell((short) 7).setCellValue(MyDate.timeStampToString(u.get(i).getDor()));
                                 // set the Profile data to the excel sheet cells
                                 row.createCell((short) 8).setCellValue(p.get(i).getRollNo());
                                 row.createCell((short) 9).setCellValue(p.get(i).getFname());
                                 row.createCell((short) 10).setCellValue(p.get(i).getLname());
                                 row.createCell((short) 11).setCellValue(MyDate.timeStampToString(Long.parseLong(p.get(i).getDoj())));  
                                 row.createCell((short) 12).setCellValue(MyDate.timeStampToString(Long.parseLong(p.get(i).getDob())));
                                 row.createCell((short) 13).setCellValue(p.get(i).getBloodGroup());
                                 row.createCell((short) 14).setCellValue(p.get(i).getPhoto());
                                 row.createCell((short) 15).setCellValue(p.get(i).getPhone1());
                                 row.createCell((short) 16).setCellValue(p.get(i).getPhone2());
                                 row.createCell((short) 17).setCellValue(p.get(i).getAddress());
                                 row.createCell((short) 18).setCellValue(p.get(i).getCity());
                                 row.createCell((short) 19).setCellValue(p.get(i).getPin());
                                 row.createCell((short) 20).setCellValue(p.get(i).getState());
                                 row.createCell((short) 21).setCellValue(p.get(i).getCountry());
                                 row.createCell((short) 22).setCellValue(p.get(i).getGrade());
                                 row.createCell((short) 23).setCellValue(p.get(i).getGroups());
                                 row.createCell((short) 24).setCellValue(p.get(i).getAssignCourse());
    
                                 index++;
                         }//for
    
                         java.io.OutputStream out = resp.getOutputStream();
                         wb.write(out);
                         out.close();
                         System.out.println("Data is Exported to Excel file.");
    
                    }//try
                    catch (Exception e) {
                     System.out.println(" Data cannot be imported :: getImport() :: ImportExportData "+e);
                    }//catch
    
    
                }//doGet
        }//class