2012-12-05 18 views
7

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

क्लाइंट साइड पर, उपयोगकर्ता "डाउनलोड" बटन दबाते समय फ़ाइल डाउनलोड कैसे कर सकता है?

"डाउनलोड" बटन में onClick() श्रोता है। और क्लाइंट साइड क्लास Composite बढ़ाता है।

मैंने कक्षा को HttpServlet का विस्तार करने की कोशिश की है, लेकिन यह बहुत जटिल हो जाता है।

मैं पहले से ही यहाँ पोस्ट पढ़ने:

  1. http://www.mkyong.com/java/how-to-download-file-from-website-java-jsp/
  2. How to use GWT when downloading Files with a Servlet?

लेकिन मैं अभी भी पता नहीं कैसे मैं ग्राहक पक्ष पर उपयोगकर्ता के लिए डाउनलोड करने योग्य फ़ाइल प्रदान कर सकते हैं।

+0

क्लाइंट के लिए: 'Window.Location.replace ("/downloadServlet ");' – Chloe

उत्तर

21

आप वास्तव में GWT ग्राहक के पक्ष जावा कोड और सर्वर साइड जावा कोड के बीच अंतर करने की जरूरत है।

अपने GWT जावा कोड

String url = GWT.getModuleBaseURL() + "downloadService?fileInfo1=" + fileInfo1; 
Window.open(url, "_blank", "status=0,toolbar=0,menubar=0,location=0"); 

सर्वर साइड पर में अपने गैर gwt जावा में ग्राहक तरफ

code- web.xml में

<servlet> 
    <servlet-name>downloadService</servlet-name> 
    <servlet-class>AAA.BBB.CCC.DownloadServlet</servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>downloadService</servlet-name> 
    <url-pattern>/<gwtmodulename>/downloadService</url-pattern> 
</servlet-mapping> 

सर्वर पैकेज कोड में एक सर्वलेट

public class DownloadServlet extends HttpServlet{ 
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException 
     { 
      String fileName = req.getParameter("fileInfo1"); 

      int BUFFER = 1024 * 100; 
      resp.setContentType("application/octet-stream"); 
      resp.setHeader("Content-Disposition:", "attachment;filename=" + "\"" + fileName + "\""); 
      ServletOutputStream outputStream = resp.getOutputStream(); 
      resp.setContentLength(Long.valueOf(getfile(fileName).length()).intValue()); 
      resp.setBufferSize(BUFFER); 
      //Your IO code goes here to create a file and set to outputStream// 

     } 
    } 

सुनिश्चित करें कि आप अपनी फ़ाइल सामग्री को **outputStream** पर दबाएं।

+0

हाँ आप सही हैं। मैंने अपना कोड करने की कोशिश की है, लेकिन क्लाइंट पक्ष पर फाइल लिखना असंभव है। मैं इस समस्या को इस तरह हल करता हूं। वैसे भी, उत्तर देने के लिए धन्यवाद। –

+0

एक नया सर्वलेट बनाने के बजाय आप अपने जीडब्ल्यूटी सेवा सर्लेटों में से एक को फिर से ओवरराइड कर सकते हैं 'javax.servlet.http.HttpServlet # doGet' विधि –

+0

बहुत निश्चित नहीं है। क्या आप कोड-नमूना साझा कर सकते हैं। – SSR

3

यदि आप फ़ाइल के पथ को जानते हैं, तो कोड स्निपेट नीचे दिखाया गया है।

button.addClickHandler(new ClickHandler() 
{ 

    @Overrid 
    public void onClick(ClickEvent event) 
    { 
     Window.open(GWT.getHostPageBaseURL() + "/file.rar", "name", "enabled"); 
    } 
}); 
+0

आपकी टिप्पणी के लिए धन्यवाद लेकिन मैं पहले से ही इस पर विचार करता हूं।समस्या यह है कि मैं क्लाइंट साइड में फ़ाइल लेखन दिनचर्या का उपयोग नहीं कर सकता (इसे संकलित किया जा सकता है, लेकिन त्रुटि का कारण बनता है - मॉड्यूल लोडिंग त्रुटि) –

+0

आप कोड द्वारा क्लाइंट पक्ष पर फ़ाइल नहीं लिख सकते हैं, इस तरह की सामग्री की अनुमति नहीं है ब्राउज़र। आपको ब्राउज़र को फ़ाइल डाउनलोड करने की आवश्यकता है, और उपयोगकर्ता डाउनलोड स्थान निर्दिष्ट करता है। – Spiff

+0

आप सही हैं। मैं इस समस्या को इसी तरह हल करता हूं। वैसे भी, उत्तर देने के लिए धन्यवाद। –

0

साथ पढ़ सकते हैं और ग्राहक पर फ़ाइलें लिखने के लिए कब हिस्से में नंबर एक आइटम के जवाब पूरा करने के लिए कोशिश कर सकते हैं ...

आप उल्लेख कर सकते हैं इस लिंक

http://www.programcreek.com/2009/02/java-convert-a-file-to-byte-array-then-convert-byte-array-to-a-file/

या इस कोड का उल्लेख

File file = new File(enter the filepath here) 
FileInputStream fis = new FileInputStream(file); 
       ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
       byte[] buf = new byte[1024]; 
       try { 
        for (int readNum; (readNum = fis.read(buf)) != -1;) { 
         bos.write(buf, 0, readNum); //no doubt here is 0 
         //Writes len bytes from the specified byte array starting at offset off to this byte array output stream. 
         System.out.println("read " + readNum + " bytes,"); 
        } 
       } catch (IOException ex) { 
        System.err.println("unable to convert to bytes"); 
       } 
       byte[] bytes = bos.toByteArray(); 
       outputStream.write(bytes); 
       outputStream.flush(); 
       outputStream.close(); 

उम्मीद है कि यह मदद करता है!

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