2010-08-29 11 views
5

क्या कोई जावा फ्रेमवर्क - पट्टियों के साथ मेरी मदद कर सकता है? मैं stripes:file साथ छवि अपलोड, सर्वर पर आकार बदलने और नए StreamingResolution वापसी ("image/jpeg" के साथ वापस जाने के लिए प्रयास करें ... मैं अब न वास्तव में कैसे StreamingResolution साथ भेजने के लिए और मैं कैसे jsp पर stripes:file तत्व के बाद छवि को लोड कर सकते हैं?स्ट्रीमिंगरोल्यूशन स्ट्रिप

कई धन्यवाद

उत्तर

4

खैर अगर आप अपलोड करने के पृष्ठ पर छवि दिखाना चाहते हैं, बातें से निपटने के लिए की एक जोड़ी रहे हैं। सबसे पहले, "पोस्ट" परिणाम न किसी तरह का करने के लिए जा रहा है , और परिणामस्वरूप शायद छवि डेटा नहीं होगा। यही है, आपकी कार्रवाई (आपका "ईवेंट हैंडलर", जैसा कि स्ट्रिप लोग उन्हें कॉल करते हैं) एक स्ट्रीमिंग रेसोल्यूशन डी वास्तव में तब तक समझ में नहीं आता जब तक कि आप सिर्फ उपयोगकर्ता को डाउनलोड की गई फ़ाइल की तरह छवि को सहेजने में सक्षम न हों।

इस प्रकार, आपकी छवि अपलोड "पोस्ट" में केवल एक सादा संकल्प शामिल हो सकता है जो परिणाम पृष्ठ पर आगे बढ़ता है। उस पृष्ठ के अंदर, आप एक HTML <img> टैग डाल सकते हैं जिसमें "स्ट्रिप" को अन्य स्ट्रिप्स क्रिया पर सेट किया गया हो। अब यह क्रिया आपके छवि डेटा के लिए स्ट्रीमिंगरोल्यूशन वापस कर देगी।

हल करने की एक समस्या यह है कि छवि डेटा को दो HTML लेन-देन में रखना है। इसके लिए, मैं एक स्ट्रिप्स "फ्लैश स्कोप" का उपयोग करता हूं क्योंकि यह बहुत आसान है। यदि आपका सर्वर कोड किसी भी डेटाबेस में छवि को स्टोर करने जा रहा है, तो निश्चित रूप से, आपकी छवि कार्रवाई यूआरएल में कुछ प्रकार की पहचान जानकारी शामिल होगी।

मान लें कि आप छवि डेटा पा सकते हैं, आपके सभी सर्वर-साइड हैंडलर को स्ट्रीमिंग रेसोल्यूशन इंस्टेंस बनाने के लिए है जो stream() विधि के लिए कार्यान्वयन है। यह एक एकल पैरामीटर (HttpServletResponse) लेता है। उस से, आप response.getOutputStream() के साथ आउटपुट स्ट्रीम खोलेंगे, उस पर छवि डेटा कॉपी करें, और फिर स्ट्रीम बंद करें। वास्तव में इसके लिए बहुत कुछ नहीं है। यहाँ एक उदाहरण है कि एक साधारण फ़ाइल भेजता है, लेकिन आप के लिए मुख्य अंतर यह छवि डेटा की और एक अलग MIME प्रकार पाठ्यक्रम का ट्रैक रखने होगा:

public Resolution image() { 
    return new StreamingResolution("text/plain") { 
     public void stream(final HttpServletResponse response) { 
      InputStream sample = null; 
      try { 
       sample = getResourceAsStream(SAMPLE + getContext().getLocale().toString()); 
       if (sample == null) sample = getResourceAsStream(SAMPLE + "en_US"); 

       final OutputStream out = response.getOutputStream(); 
       final byte buffer[] = new byte[8192]; 

       out.write((HEADER + "\n").getBytes()); 

       for (int rc = sample.read(buffer); rc > 0; rc = sample.read(buffer)) 
        out.write(buffer, 0, rc); 
      } 
      finally { 
       if (sample != null) try { sample.close(); } catch (IOException ioe) { } 
      } 
     } 
    }; 
} 

तुम भी setAttachment(false); कॉल करने के लिए इससे पहले कि आप शुरू करना चाहेंगे छवि डेटा लिखना। यह उदाहरण फ़ाइल डाउनलोड के लिए है, इसलिए मेरे मामले में मैं चाहता हूं कि यह अनुलग्नक हो (और यह डिफ़ॉल्ट है)। यदि आप <img> टैग से जेनरेट किए गए "GET" का जवाब दे रहे हैं, तो आप नहीं चाहते हैं कि यह अनुलग्नक की तरह दिखें।

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