2013-08-19 51 views
2

我正在开发一个应用程序,我想通过调用服务从应用程序创建'MS-EXCEL'文件,并且我想将该文件作为响应返回到客户机上用对话框保存文件。如何使用GWT获取路径选择器对话框来保存文件

目前我很难编码程序中的路径。我不能使用swing我想在GWT中实现这个。

 if (name.equalsIgnoreCase("DigitalInputReport")) {  
        response.setHeader(
               "Content-disposition", 
               "attachment; filename=\"DIR_" 
                 + TimeZoneUtil.getPdfDate(fromDate) + "_" 
                 + TimeZoneUtil.getPdfDate(toDate) + ".csv\""); 

     List<ReportData> datas = new ArrayList<ReportData>(); 
     // Calling Service 
     datas = fleetTrackingServiceImpl.getDIN2SummaryReport(vehicle, 
            fromDate, toDate); 

     FileWriter writer = new FileWriter("C:\\Windows\\Temp\\DIR_" 
               + TimeZoneUtil.getPdfDate(fromDate) + "_" 
               + TimeZoneUtil.getPdfDate(toDate) + ".csv"); 
             try { 
              hashMapRunDur = datas.get(datas.size() - 1).getRunHashMap(); 
              hashMapStopDur = datas.get(datas.size() - 1) 
                .getStopHashMap(); 
              int runDur = 0, stopDur = 0; 
              writer.append("From Hour"); 
              writer.append(','); 
              writer.append("To Hour"); 
              writer.append(','); 
              writer.append("Minutes ON"); 
              writer.append(','); 
              writer.append("Minutes OFF"); 
              writer.append(','); 
              writer.append('\n'); 
              writer.append("Date"); 
              writer.append(','); 
              String dtChk = null, dtChkPrev = null; 
              for (int i = 0; i < datas.size(); i++) { 

               if (i == 0) { 
                dtChk = datas.get(i).getToDate(); 
                writer.append(datas.get(i).getToDate()); 
                writer.append(','); 
                writer.append('\n'); 
                writer.append(datas.get(i).getRunTime()); 
                writer.append(','); 
                writer.append(datas.get(i).getStopTime()); 
                writer.append(','); 
                writer.append(datas.get(i).getRunDur()); 
                writer.append(','); 
                writer.append(datas.get(i).getStopDur()); 
                writer.append('\n'); 
               } else { 
                dtChkPrev = dtChk; 
                dtChk = datas.get(i).getToDate(); 
                if (dtChkPrev.equals(dtChk)) { 
                 writer.append(datas.get(i).getRunTime()); 
                 writer.append(','); 
                 writer.append(datas.get(i).getStopTime()); 
                 writer.append(','); 
                 writer.append(datas.get(i).getRunDur()); 
                 writer.append(','); 
                 writer.append(datas.get(i).getStopDur()); 
                 writer.append('\n'); 
                } else { 
                 for (Map.Entry<String, String> e : hashMapRunDur 
                   .entrySet()) { 
                  runDur = (Integer.valueOf(e.getValue())); 
                  stopDur = (Integer.valueOf(hashMapStopDur 
                    .get(e.getKey()))); 
                  break; 
                 } 
// To delete first entry 
       Iterator<Map.Entry<String, String>> iterRun = hashMapRunDur 
                   .entrySet().iterator(); 
                 while (iterRun.hasNext()) { 
                  Map.Entry<String, String> entry = iterRun 
                    .next(); 
                  if (datas.get(i - 1).getToDate() 
                    .equalsIgnoreCase(entry.getKey())) { 
                   iterRun.remove(); 
                  } 
                 } 
                 Iterator<Map.Entry<String, String>> iterStop = hashMapStopDur 
                   .entrySet().iterator(); 
                 while (iterStop.hasNext()) { 
                  Map.Entry<String, String> entry = iterStop 
                    .next(); 
                  if (datas.get(i - 1).getToDate() 
                    .equalsIgnoreCase(entry.getKey())) { 
                   iterStop.remove(); 
                  } 
                 } 
                 writer.append(' '); 
                 writer.append(','); 
                 writer.append("Total ON/OFF"); 
                 writer.append(','); 
                 writer.append(formatIntoHHMMSSWithOutDay(runDur)); 
                 writer.append(','); 
                 writer.append(formatIntoHHMMSSWithOutDay(stopDur)); 
                 writer.append(','); 
                 writer.append('\n'); 

                 dtChk = datas.get(i).getToDate(); 
                 writer.append("Date"); 
                 writer.append(','); 
                 writer.append(datas.get(i).getToDate()); 
                 writer.append(','); 
                 writer.append('\n'); 
                 writer.append(datas.get(i).getRunTime()); 
                 writer.append(','); 
                 writer.append(datas.get(i).getStopTime()); 
                 writer.append(','); 
                 writer.append(datas.get(i).getRunDur()); 
                 writer.append(','); 
                 writer.append(datas.get(i).getStopDur()); 
                 writer.append('\n'); 
                } 
                if (i == datas.size() - 1) { 
                 for (Map.Entry<String, String> e : hashMapRunDur 
                   .entrySet()) { 
                  runDur = (Integer.valueOf(e.getValue())); 
                  stopDur = (Integer.valueOf(hashMapStopDur 
                    .get(e.getKey()))); 
                  break; 
                 } 
                 writer.append(' '); 
                 writer.append(','); 
                 writer.append("Total ON/OFF"); 
                 writer.append(','); 
                 writer.append(formatIntoHHMMSSWithOutDay(runDur)); 
                 writer.append(','); 
                 writer.append(formatIntoHHMMSSWithOutDay(stopDur)); 
                 writer.append(','); 
                 writer.append('\n'); 
                } 
               } 

              } 
             } catch (IOException e) { 
              e.printStackTrace(); 
             } finally { 
              writer.flush(); 
              writer.close(); 
             } 
       } 

这是Servlet编码。当我调用它在这里获得输出(c:// windows/temp/DIR _...),但没有在客户端下载的文件(我只获得'DigitalInputReport')。请解释一下我简单...

csvBtn.addSelectionListener(new SelectionListener<ButtonEvent>() { 

      @Override 
      public void componentSelected(ButtonEvent ce) { 
       String gwt = GWT.getHostPageBaseURL(); 
       Window.open(
         gwt 
           + "generateCSVServlet?name=DigitalInputReport&fromDate=" 
           + fromDate + "&toDate=" + toDate + "&compName=" 
           + LoginDashboardModule.companyId 
           + "&brnchName=" + LoginDashboardModule.branchId 
           + "&userName=" + LoginDashboardModule.userName 
           + "&selectedVehicle=" + selectedVehicle, null, null);    
      } 
     }); 

这是客户端代码

回答

3
File temp = new File("C:\\Windows\\Temp\\DIR_" 
             + TimeZoneUtil.getPdfDate(fromDate) + "_" 
             + TimeZoneUtil.getPdfDate(toDate) + ".csv"); 

try (BufferedReader br = new BufferedReader(new FileReader(temp))) 
           { 
            String isCurrentLine; 
            while ((isCurrentLine = br.readLine()) != null) { 
             response.getOutputStream().write("\n".getBytes()); 
             byte[] b = isCurrentLine.getBytes(); 
             response.getOutputStream().write(b); 
            } 

           } catch (IOException e) { 
            e.printStackTrace(); 
           } 

使用这个代码,我可以直接从服务器端返回文件的内容,客户端和保存文件上客户端机器与他的愿望。

1

使用文件上传来获取路径。

A widget that wraps the HTML <input type='file'> element. 

而且在changeEvent中,你可以得到的文件名/路径:

FileUpload file = (FileUpload) event.getSource(); 
String filename = file.getFilename(); 
+0

其实我是从服务器端创建Excel工作表,我没有任何事件在服务器端代码。 按钮在客户端编码。 –

+1

我不明白,如果你想保存你的文件在服务器或客户端。如果客户端,你可以从客户端获取文件名,然后使用文件名保存excel文件。但是,保存路径由用户的浏览器控制。您无法直接将文件写入客户端绝对路径。 – criszhao

+0

@criszhao我会说他希望将服务器上创建的文件保存到服务器上的其他位置,但希望用户选择服务器上的哪个位置来保存它。 Ibadur你应该编辑你的问题来清除这个服务器/客户端的事情 – Piro

相关问题