2013-06-12 8 views
7

मुझे लगता है कि आप जावा बीन में XPAGE नियंत्रण को बाध्य करने के लिए अभिव्यक्ति भाषा का उपयोग कैसे कर सकते हैं। फिर यह स्वचालित रूप से सेटर्स और गेटर्स तक पहुंचता है।XPages के माध्यम से अनुलग्नक को अपलोड और सहेजने के लिए कैसे करें जावा बीन

लेकिन आप फ़ाइल अनुलग्नक को कैसे संभालेंगे?

यह कैसा दिखता है? मैं अनुमान लगा सकता हूं कि फ़ाइल अपलोड नियंत्रण को बीन पर बांधें। अनुलग्नक को "जो कुछ भी" दस्तावेज़ में सहेजें ... चाहे वह वर्तमान या बाहरी दस्तावेज़ हो .. बीन उस तर्क को संभालने में सक्षम होना चाहिए।

मुझे लगता है कि मुझे नहीं पता कि मेमोरी बीन में उस फ़ाइल अटैचमेंट को कैसे प्राप्त किया जा सकता है ताकि दस्तावेज़ में सहेजने जैसी कुछ भी करने में सक्षम हो सके।

किसी भी सलाह की सराहना की जाएगी।

अपडेट: यह यह करने के लिए इसी तरह की एक सवाल यह है: How to store uploaded file to local file system using xPages upload control?

लेकिन उस प्रश्न उपयोगकर्ता स्थानीय डिस्क को बचाना चाहता है में। मैं एक दस्तावेज़ में सहेजने के लिए देख रहा हूँ।

धन्यवाद!

उत्तर

9

आप com.ibm.xsp.component.UIFileuploadEx.UploadedFile वर्ग का उपयोग कर एक गेटर और सेम में सेटर बनाने की जरूरत फ़ंक्शन सहेजें) आप यह जांच कर सकते हैं कि ऑब्जेक्ट शून्य है या नहीं, यह जांचकर फ़ाइल अपलोड की गई थी या नहीं। यदि यह शून्य नहीं है, तो एक फ़ाइल अपलोड की गई थी।

उस अपलोड की गई फ़ाइल को संसाधित करने के लिए, पहले com.ibm.xsp.http.IUploadedFile ऑब्जेक्ट getServerFile() विधि का उपयोग करके ऑब्जेक्ट प्राप्त करें। उस ऑब्जेक्ट में getServerFile() विधि है जो अपलोड की गई फ़ाइल के लिए फ़ाइल ऑब्जेक्ट देता है। उस ऑब्जेक्ट के साथ समस्या यह है कि इसमें एक गुप्त नाम है (शायद एक ही नाम के साथ फाइलों को अपलोड करने वाले कई लोगों से निपटने के लिए)। मूल फ़ाइल नाम को getClientFileName() IUploadedFile क्लास की विधि का उपयोग करके पुनर्प्राप्त किया जा सकता है।

जो मैं करता हूं वह क्रिप्टिक फ़ाइल का नाम मूल फ़ाइल नाम में बदलना है, इसे संसाधित करें (इसे समृद्ध टेक्स्ट फ़ील्ड में एम्बेड करें या इसके साथ कुछ और करें) और उसके बाद इसे अपने मूल (गुप्त) नाम। यह अंतिम चरण महत्वपूर्ण है क्योंकि कोड समाप्त होने के बाद ही फ़ाइल को साफ़ (हटाया गया) साफ़ कर दिया जाता है।

import java.io.File; 
import com.ibm.xsp.component.UIFileuploadEx.UploadedFile; 
import com.ibm.xsp.http.IUploadedFile; 
import lotus.domino.Database; 
import lotus.domino.Document; 
import lotus.domino.RichTextItem; 
import com.ibm.xsp.extlib.util.ExtLibUtil; //only used here to get the current db 

public void saveMyBean() { 

    if (uploadedFile != null) { 

     //get the uploaded file 
     IUploadedFile iUploadedFile = uploadedFile.getUploadedFile(); 

     //get the server file (with a cryptic filename) 
     File serverFile = iUploadedFile.getServerFile();   

     //get the original filename 
     String fileName = iUploadedFile.getClientFileName();  

     File correctedFile = new File(serverFile.getParentFile().getAbsolutePath() + File.separator + fileName); 

     //rename the file to its original name 
     boolean success = serverFile.renameTo(correctedFile); 

     if (success) { 
      //do whatever you want here with correctedFile 

      //example of how to embed it in a document: 
      Database dbCurrent = ExtLibUtil.getCurrentDatabase(); 
      Document doc = dbCurrent.createDocument(); 
      RichTextItem rtFiles = doc.createRichTextItem("files"); 
      rtFiles.embedObject(lotus.domino.EmbeddedObject.EMBED_ATTACHMENT, "", correctedFile.getAbsolutePath(), null); 
      doc.save(); 

      rtFiles.recycle(); 
      doc.recycle(); 

      //if we're done: rename it back to the original filename, so it gets cleaned up by the server 
      correctedFile.renameTo(iUploadedFile.getServerFile()); 
     } 


    } 
} 
+0

यह बात करने का एक बहुत अच्छा तरीका है:

यहाँ ऊपर के चरणों के लिए नमूना कोड है। मैं दोहराव नियंत्रण के साथ इसका उपयोग करता हूं जहां मैं सीधे अपने जावा बीन में प्रत्येक अपलोड को संसाधित कर सकता हूं ;-) –

+0

यह वास्तव में मेरे लिए स्पष्ट नहीं है कि आप प्रबंधित बीन में फ़ाइल अपलोड नियंत्रण को कैसे बाध्य करते हैं? –

+0

इस तरह की http://per.lausten.dk/blog/2012/02/creating-your-first-managed-bean-for-xpages.html। मैंने जो कक्षा का उल्लेख किया है उसका उपयोग करके गेटटर और सेटर जोड़ें और अभिव्यक्ति भाषा का उपयोग कर फ़ाइल अपलोड नियंत्रण में बाध्य करें: "# {beanName.propertyName} –

4

मेरे पास कोड है जो जावा में अपलोड की गई फ़ाइल को संसाधित करता है। फ़ाइल सामान्य फ़ाइल अपलोड नियंत्रण के साथ अपलोड की जाती है और फिर मैं एक बटन से निम्नलिखित जावा कोड को कॉल करता हूं (जो एक पूर्ण ताज़ा करता है - ताकि अपलोड की गई फ़ाइल सहित दस्तावेज़ सहेजा जा सके)।

public void importFile() { 

    facesContext = FacesContext.getCurrentInstance(); 
    ExternalContext externalContext = facesContext.getExternalContext(); 

    // get a handle an the uploaded file 
    HttpServletRequest request = (HttpServletRequest) externalContext.getRequest(); 
    String fileUploadID = JSFUtil.findComponent("uploadFile").getClientId(FacesContext.getCurrentInstance()); 
    UploadedFile uploadedFile = ((UploadedFile) request.getParameterMap().get(fileUploadID)); 

    if (uploadedFile == null) { 
     facesContext.addMessage("messages1", new FacesMessage(FacesMessage.SEVERITY_ERROR, "No file uploaded. Use the file upload button to upload a file.", "")); 
     return; 
    } 

    File file = uploadedFile.getServerFile(); 

    String fileName = uploadedFile.getClientFileName(); 

    // Check that filename ends with .txt 
    if (!fileName.endsWith(".txt")) { 
     facesContext.addMessage("messages1", new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error in uploaded file. The file must end with .txt", "")); 
     return; 
    } 

    try { 
     // Open the file 
     BufferedReader br; 

     br = new BufferedReader(new FileReader(file)); 
     String strLine; 

     // Read File Line By Line 
     while ((strLine = br.readLine()) != null) { 
      // do stuff with the contents of the file 
     } 

     // Close the input stream 
     br.close(); 

    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } catch (Exception e) { 
     facesContext.addMessage("messages1", new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error in uploaded file. Please check format of file and try again", "")); 
     return; 
    } 

    facesContext.addMessage("messages1", new FacesMessage(FacesMessage.SEVERITY_INFO, "File successfully uploaded", "")); 
} 

फ़ाइल वस्तु आप embedObject का उपयोग कर अन्य दस्तावेजों में फ़ाइल स्टोर कर सकते हैं पर एक संभाल के साथ: जावा कोड में आप जो कुछ भी की जाँच करता है आप (फ़ाइल नाम, फ़ाइल आकार आदि) चाहते हो सकता है। (

private UploadedFile uploadedFile; 

public UploadedFile getFileUpload() { 
    return uploadedFile; 
} 
public void setFileUpload(UploadedFile to) { 
    this.uploadedFile = to; 
} 

समारोह है कि सेम डेटा प्रक्रियाओं में जैसे एक:

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