में सर्वर पर फ़ाइल और हैश मैप भेजना मुझे फ़ाइल और उनके गुण GWT सर्वर पर भेजना है।GWT
फ़ाइल भेजने के लिए मैंने फॉर्म पैनल का उपयोग किया।
public class BrowseFile extends DialogBox {
// more code
// ..
private FormPanel getFormPanel() {
if (formPanel == null) {
formPanel = new FormPanel();
formPanel.setMethod(FormPanel.METHOD_POST);
formPanel.setEncoding(FormPanel.ENCODING_MULTIPART);
formPanel.setAction(GWT.getHostPageBaseURL() +"UploadFileServlet");
formPanel.addSubmitHandler(new FormPanel.SubmitHandler(){
public void onSubmit(SubmitEvent event) {
// TODO Auto-generated method stub
setFilename(fileUpload.getFilename());
}
});
}
return formPanel;
}
}
सब इस फाइल के गुणों HashMap में हैं
2 संवाद बॉक्स Propertybox extends DialogBox
और
BrowseFile extends DialogBox
PropertyBox के निर्माता के अंदर हैं वहाँ BrowseFile
जब PropertyBox निर्माता
setSize("600px", "670px");
setHTML("Add Document");
setWidget(getVerticalPanel());
browseFile = new BrowseFile();
PropertyBox अंदर कस्टम संपत्ति वर्ग का चयन किया पर निर्भर करता है
सर्वर साइड
public class FileUpload extends HttpServlet implements Servlet{
private static final long serialVersionUID = 1L;
private static final Logger log = Logger.getLogger(FileUpload.class
.getName());
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
byte[] buffer = new byte[115200];//
String fileName = null;
String mimetype = null;
String majorVersion = null;
InputStream stream = null;
try {
ServletFileUpload upload = new ServletFileUpload();
FileItemIterator iterator = upload.getItemIterator(request);
while (iterator.hasNext()) {
FileItemStream item = iterator.next();
stream = item.openStream();
if (item.isFormField()) {
//
} else {
fileName = item.getName();
mimetype = item.getContentType();
//
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ByteArrayOutputStream output = new ByteArrayOutputStream();
int len;
while ((len = stream.read(buffer, 0, buffer.length)) != -1) {
output.write(buffer, 0, len);
}
ByteArrayInputStream input = new ByteArrayInputStream(output.toByteArray());
Session session =RootFolder.getSession();
ContentStream contentStream = session.getObjectFactory()
.createContentStream(fileName, output.size(), mimetype, input);
}
बाहरी भंडार में एक दस्तावेज़ बना रहा के लिए पर (कक्षा पेड़ विजेट है) मैं में दस्तावेज़ संपत्ति की जरूरत है हैसम
फ़ोल्डर.क्रेट दस्तावेज़ (दस्तावेज़ संपत्ति, सामग्री स्ट्रीम, वर्जनिंगस्टेट.एमजेओआर);
दस्तावेज़ संपत्ति दस्तावेज संपत्ति वर्ग के Button ADD
की onClick
घटना पर इस वर्ग के लिए भेज दिया जाना चाहिए
***** कैसे वर्ग FileUpload में सर्वर के लिए इस दस्तावेज़ संपत्ति भेजने के लिए *****
200 से अधिक गुण हो सकते हैं। और ये संपत्ति दस्तावेज़ के लिए चुनी गई कक्षा पर निर्भर करती है। और 50 से अधिक दस्तावेज़ वर्ग हैं। इसलिए हैश मैप को फॉर्म फ़ील्ड के रूप में जोड़ना एक अच्छा विकल्प नहीं है और हैसमैप का मूल्य हिस्सा वर्ग है जिसमें 3 चर (मान, डेटा टाइप) है। – NewCodeLearner
@NewCodeLearner मुझे नहीं लगता कि आप अनुरोध में फॉर्म फ़ील्ड क्यों नहीं जोड़ सकते हैं - आखिरकार, यह डेटा मल्टीपार्ट है और इस प्रकार यह असीमित संख्या में फ़ील्ड को संभाल सकता है। और HashMap.entrySet भर में गणना उस बड़े सौदे नहीं है। मैं कुछ बाइनरी स्ट्रीम में हैश मैप को क्रमबद्ध करने के लिए सलाह दे सकता हूं और फिर इसे कच्चे डेटा के रूप में भेज सकता हूं - लेकिन यह हैक की तरह है और मुझे यकीन है कि आप यह नहीं चाहते हैं। आप प्रत्येक प्रकार की फ़ाइल के लिए गतिशील रूप से फ़ील्ड्स बनाते हैं, उन्हें क्लाइंट पर फॉर्म फ़ील्ड्स के सेट में मार्शल करते हैं और सर्वर पर अनारशल करते हैं, हैश मैप फ़ाइल के साथ मिलते हैं- और यही वह है। समझ में आता है? यदि नहीं - कृपया समझाओ, क्यों। – jdevelop
हे, मैं प्रोग्रामिंग में अच्छा नहीं हूं और इसके बारे में बहुत कम ज्ञान नहीं है। मैं कोशिश करूँगा कि आप कह रहे हैं। तो मैं आपको बता दूंगा कि मैं वही चाहता हूं या नहीं.धन्यवाद। – NewCodeLearner