मैं जावा जेडीके 1.7 और जर्सी वेब सेवा फ्रेमवर्क का उपयोग कर एक वेब सेवा लिख रहा हूं। मुझे प्रदान करने की ज़रूरतों में से एक है प्रमाणीकृत ग्राहकों को कुछ बड़ी डेटा फ़ाइलों (1-3 जीबी) डाउनलोड करने की अनुमति देने का एक तरीका है। आदर्श रूप में मैं इसे एक विराम और फिर से शुरू करने के प्रकार डाउनलोड करने योग्य विकल्प होना चाहता हूं। मैंने जर्सी मल्टी-पार्ट एपीआई की कोशिश की और 400 एमबी तक मेरी क्लाइंट मशीन पर काम करने में सक्षम था, लेकिन उससे परे यह मेमोरी के मुद्दों से बाहर हो गया। मैं भी चिंतित हूं कि एक साथ डाउनलोड अनुरोधों का सामना करते समय सर्वर विफल हो सकता है। इस पर कोई विचार कैसे किया जा सकता है? नेटटी एक विकल्प है? नेटटी को मौजूदा जर्सी आधारित वेब सेवा में कैसे एकीकृत किया जा सकता है इस पर कोई संकेतक? क्या इसे पूरा करने में सहायता के लिए अन्य फ्रेम काम उपलब्ध हैं? मुझे वेब सेवा के लिए जावा का उपयोग करना है। कोई भी पॉइंटर्स सहायक होगा।जावा सर्वर से बड़ी फ़ाइल स्थानांतरण जावा जर्सी रेस्ट एपीआई
उत्तर
यदि आप आउट-ऑफ-मेमोरी समस्याओं पर फंस रहे हैं, तो आपको यह जांचना चाहिए कि आप डाउनलोड करने वाले डेटा को कैसे प्रबंधित कर रहे हैं। यदि आप जर्सी के क्लाइंट रिस्पॉन्स का उपयोग कर रहे हैं, तो सुनिश्चित करें कि आप getEntityInputStream() का उपयोग कर रहे हैं और getEntity() नहीं प्राप्त कर रहे हैं। इस तरह, आप डेटा को स्ट्रीम कर सकते हैं, इसे फ़ाइल में लिख सकते हैं, और इसे जावा हीप स्पेस में बनाने की बजाय इसे अलग कर सकते हैं।
मैं वास्तव में आपकी एक साथ डाउनलोड चिंताओं के बारे में बात नहीं कर सकता, लेकिन यदि आप वेब सेवाओं के ढांचे का उपयोग कर रहे हैं, तो इसे ठीक से संभाला जाना चाहिए।
दोनों मुद्दों के लिए, आपके विशिष्ट कार्यान्वयन, विशेष रूप से कोड पर अधिक जानकारी, आपको बेहतर प्रतिक्रिया प्राप्त करने में मदद मिलेगी।
सर्वर और क्लाइंट दोनों को HTTP खंडित एन्कोडिंग का समर्थन करना चाहिए जो HTTP को HTTP का उपयोग करके डेटा स्ट्रीम करने की अनुमति देता है। नीचे दिया गया कोड जर्सी 2.11 के साथ काम करना चाहिए।
बड़ी फ़ाइलें डाउनलोड करने के लिए, सर्वर पर इस कोशिश:
@GET
@Path("/files/{fileName}")
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public StreamingOutput getFile(@PathParam("fileName") final String fileName) throws Exception {
//create instance of StreamingOutput here
return streamingOutput;
}
एक फ़ाइल डाउनलोड करने steams का उपयोग कर एक ग्राहक GET अनुरोध के लिए यह प्रयास।
public String getFileReq(File outFile) throws IOException {
client = ClientBuilder.newClient(new ClientConfig());
client.property(ClientProperties.REQUEST_ENTITY_PROCESSING, "CHUNKED");
WebTarget target = client.target(URI)
OutputStream fileOutputStream = new FileOutputStream(outFile);
InputStream fileInputStream = target.request().get(InputStream.class);
writeFile(fileInputStream, fileOutputStream);
}
public static void writeFile(InputStream fileInputStream, OutputStream outputStream) throws IOException {
try {
byte[] buffer = new byte[1024];
int bytesRead;
while((bytesRead = fileInputStream.read(buffer)) !=-1) {
outputStream.write(buffer, 0, bytesRead);
}
fileInputStream.close();
outputStream.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
outputStream.close();
}
- 1. जावा फ़ाइल स्थानांतरण API
- 2. जावा जर्सी
- 3. जावा बड़ी फ़ाइल
- 4. जावा फ़ाइल/आईओ एपीआई
- 5. जावा जर्सी: बाइट सरणी
- 6. जीजेआईपी http-प्रतिक्रिया (जर्सी क्लाइंट एपीआई, जावा का उपयोग करके)
- 7. जावा मल्टीथ्रेडिंग एक बड़ी फ़ाइल को पढ़ने
- 8. जावा: बड़ी फाइलें लिखना?
- 9. जावा एपीआई
- 10. जावा एपीआई
- 11. जावा ईई 6 एपीआई
- 12. सी # क्लाइंट से जावा सर्वर
- 13. जावा एपीआई
- 14. जावा एपीआई
- 15. जावा एपीआई
- 16. मोबाइल डिवाइस से सर्वर पर मजबूत फ़ाइल स्थानांतरण
- 17. जावा से एंड्रॉइड ऑडियोट्रैक एपीआई
- 18. जावा एपीआई
- 19. जावा क्लाइंट से .NET सर्वर
- 20. जर्सी आराम एपीआई
- 21. जावा सामग्री एपीआई
- 22. एंड्रॉइड सॉकेट फ़ाइल स्थानांतरण
- 23. जावा पर्सिस्टेंस एपीआई
- 24. जावा आरईएसटी कार्यान्वयन: जर्सी बनाम सीएक्सएफ
- 25. ब्लूटूथ फ़ाइल स्थानांतरण एंड्रॉइड
- 26. जावा एपीआई तोड़
- 27. मैवेन से जावा सर्वर चलाएं
- 28. आराम से एपीआई कोडिनेटर - जावा समस्या
- 29. पेपैल जावा एपीआई
- 30. SQL सर्वर से MySQL डेटा स्थानांतरण
शायद स्वीकार किए जाते हैं जवाब आप भी मदद कर सकते हैं: http://stackoverflow.com/questions/10326460/upload-a-large-file-using-jersey-client – Eich
है यह sftp या ftps करने के लिए "आउटसोर्स" करने का विकल्प है? सर्वरसाइड को तब मानक एफटीपी-सर्वर-एप्लिकेशन द्वारा प्रबंधित किया जा सकता है। क्लाइंट साइड पर निश्चित रूप से उपयोग करने के लिए उपयोग घटक हैं। – Fildor
चूंकि यह केवल डाउनलोड है: webservice को कुछ वेबसर्वर (उदाहरण के लिए अपाचे httpd) के लिए http: लिंक प्रदान करें जो केवल फ़ाइल परोसता है। यदि आप apache httpd के माध्यम से प्रॉक्सी करते हैं तो यह आपके लिए प्रमाणीकरण भी कर सकता है। –