क्लाउड में एक एज़्योर ब्लॉब (पीडीएफ) पढ़ने का सबसे व्यावहारिक तरीका?

Aug 18 2020

मैं कुछ हद तक शुरुआती हूं और पहले कभी भी क्लाउड-आधारित समाधानों से नहीं जुड़ा था।

मेरा प्रोग्राम PDF से डेटा निकालने के लिए PDFBox लाइब्रेरी का उपयोग करता है और डेटा के आधार पर फ़ाइल का नाम बदल देता है। यह वर्तमान में सभी स्थानीय है, लेकिन अंततः एज़्योर फ़ंक्शन के रूप में तैनात करने की आवश्यकता होगी। PDF को Azure Blob कंटेनर में संग्रहीत किया जाएगा - Azure फ़ंक्शंस के लिए Azure Blob Storage ट्रिगर इस पसंद का एक महत्वपूर्ण कारण है।

बेशक मैं स्थानीय रूप से बूँद को डाउनलोड कर सकता हूं और इसे पढ़ सकता हूं, लेकिन यह कार्यक्रम पूरी तरह से क्लाउड में चलना चाहिए। मैंने सीधे जावा का उपयोग करते हुए ब्लब्स पढ़ने की कोशिश की है, लेकिन इसका परिणाम अस्पष्ट डेटा था और पीडीएफबॉक्स के साथ संगत नहीं था। अब मेरी योजना क्लाउड में कहीं और फ़ाइलों को संग्रहीत करने की है (जैसे OneDrive, Azure फ़ाइल संग्रहण) और उन्हें वहां से खोलने का प्रयास करें। हालांकि, ऐसा लगता है कि यह जल्दी से एक गड़बड़ गड़बड़ समाधान में बदल सकता है। मेरे सवाल:

(1) क्या कोई ऐसा तरीका है जो एक CloudBlockBlob के बजाय एक फ़ाइल के रूप में खोला जा सकता है, इसलिए इस अतिरिक्त कदम की आवश्यकता नहीं है?

(२) यदि नहीं, तो इस मामले में अनुशंसित अस्थायी भंडारण क्या होगा?

(३) क्या इस मुद्दे से निपटने के लिए कोई वैकल्पिक तरीका है?

जवाब

2 krishg Aug 29 2020 at 16:30

चूंकि आप Azure फ़ंक्शन की योजना बना रहे हैं, आप सीधे बाइट प्राप्त करने के लिए बूँद ट्रिगर / बाइंडिंग का उपयोग कर सकते हैं । फिर आप ऑब्जेक्ट को सीधे बनाने के लिए PDFBox PdfDocument लोड विधि का उपयोग कर सकते हैं PDDocument.load(content)। उस लोड करने के लिए फ़ाइल को संग्रहीत करने के लिए आपको किसी अस्थायी संग्रहण की आवश्यकता नहीं होगी।

@FunctionName("blobprocessor")
public void run(
  @BlobTrigger(name = "file",
               dataType = "binary",
               path = "myblob/{name}",
               connection = "MyStorageAccountAppSetting") byte[] content,
  @BindingName("name") String filename,
  final ExecutionContext context
) {
  context.getLogger().info("Name: " + filename + " Size: " + content.length + " bytes");
  PDDocument doc = PDDocument.load(content);
  // do your stuffs
}