9

मेरी ऐप्लिकेशन में, मैं तस्वीरें सीधे ग्राहक से S3 के लिए सुझाव दिया भेज रहा है, इस के लिए कुछ इसी तरह का उपयोग कर Heroku सिफारिश: https://devcenter.heroku.com/articles/s3-upload-nodeक्लाइंट से सर्वर पर बेस 64 छवि को स्थानांतरित करने या एस 3 बाल्टी से बाइनरी/बेस 64 डाउनलोड करने के लिए कैसे?

मुख्य लाभ यह है कि यह सर्वर लागत (के बाद से हिस्सा नहीं हैं 'मैं यह सोचते हैं रहा हूँ बचाता है मल्टीपार्ट-वाई फॉर्म डेटा जैसे कुछ का उपयोग कर सर्वर पर भेजा जा रहा है)।

पोस्ट सुनिश्चित करें एक बहुखण्डीय/फार्म-डेटा अनुरोध है:

हालांकि, मैं इन छवियों को साझा करने के लिए भी ट्विटर के लिए है, जो इस आवश्यकता को कहा गया है सक्षम होने के लिए चाहते हैं। या तो फ़ाइल के कच्चे बाइनरी (मीडिया पैरामीटर), या इसकी बेस 64-एन्कोडेड सामग्री (media_data पैरामीटर) अपलोड करें। , कच्चे द्विआधारी का उपयोग करें जब संभव बड़ा फ़ाइल में बेस 64 एन्कोडिंग परिणाम आकार क्योंकि

मैं बेस 64 क्लाइंट साइड के लिए आवश्यक भेजने S3 वापस सर्वर पर अपलोड है, लेकिन तस्वीर आकार के आधार पर की कोशिश की है - मैं अक्सर एक त्रुटि प्राप्त होती है कि वापस भेजने के लिए यह बहुत बड़ा है।

TLDR

मैं अपने सर्वर से mulitparty/बहुखण्डीय प्रपत्र डेटा का उपयोग कर मेरी तस्वीरें भेजने के लिए की जरूरत है, तो मैं जरूरत बेस 64/ट्विटर करने के लिए एक तस्वीर साझा करने के लिए द्विआधारी हो सकता है, या मैं भेज रख सकते करो मेरे क्लाइंट से एस 3 तक की तस्वीरें?

फिर, किसी भी तरह, कुशलतापूर्वक सर्वर (संभवतः अनुरोध मॉड्यूल का उपयोग करके) पर जरूरत बेस 64/बाइनरी प्राप्त है, इसलिए मैं तो ट्विटर के लिए छवि भेज सकते हैं?

उत्तर

2

अपने क्लाइंट कोड को बदलने के बिना ऐसा करने का एक आसान तरीका S3 events का उपयोग करना होगा। एस 3 घटनाएं एडब्लूएस में एक लैम्ब्डा फ़ंक्शन ट्रिगर कर सकती हैं जो छवि को ट्विटर पर पोस्ट कर सकती है। आप ट्विटर पर कुशल पोस्टिंग करने के लिए लैम्ब्डा फ़ंक्शन के अंदर किसी भी लाइब्रेरी का उपयोग कर सकते हैं। सुनिश्चित नहीं है कि आप Lambda या Heroku के लिए छड़ी का उपयोग करना चाहते हैं।

0

यदि आप सीधे क्लाइंट से एस 3 पर अपलोड करने के लिए दस्तावेज़ अपलोड कर रहे हैं, तो आप क्लाइंट के साथ अपने एडब्ल्यूएस गुप्त/निजी कुंजी का पर्दाफाश कर रहे हैं। बदले में नोड और नोड में छवियों को अपलोड करने का एक और सुरक्षित तरीका एस 3 पर अपलोड करेगा। नोड सर्वर पर छवियों को अपलोड करने का एक अनुशंसित तरीका मल्टीपार्ट/फॉर्म-डेटा का उपयोग करेगा और Multer मिडलवेयर का उपयोग करेगा।

अपलोड विधि के बावजूद, आप ट्विटर पर छवियों की सेवा के लिए निम्न कोड का उपयोग कर सकते हैं। यह कोड AWS-SDK मॉड्यूल का उपयोग करता है।

var s3 = new AWS.S3(); 
    var filename = req.query.filename; 
    var params = { 
     Bucket: <bucketname>, 
     Key: <image path> 
    }; 

    var extension = filename.split('.')[1]; 
    if (extension == "jpg" || extension == "JPG" || extension == "jpeg" || extension == "JPEG") 
    { 
     res.setHeader('Content-Type', 'image'); 
    } 
    else if (extension == "png" || extension == "PNG") 
    { 
     res.setHeader('Content-Type', 'image/png'); 
    } 

    s3.getObject(params).createReadStream().pipe(res); 

यह विधि किसी अन्य एक्सप्रेस ऐप की तरह आसान हो सकती है।

+0

अंतिम उपयोगकर्ताओं को सीधे S3 पर अपलोड करने की अनुमति देने के लिए आपको अपने एडब्ल्यूएस प्रमाण-पत्रों का खुलासा करने की आवश्यकता नहीं है। "पूर्व-हस्ताक्षरित यूआरएल का उपयोग कर ऑब्जेक्ट अपलोड करना" देखें – chris

+0

हां, मेरे क्रेडेंशियल्स सर्वर पर सुरक्षित हैं। – NoobSter

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