मैं एस 3 से एक फ़ाइल डाउनलोड करने की कोशिश कर रहा हूं और उस फ़ाइल को एस 3 में दूसरी बाल्टी में अपलोड कर रहा हूं। कॉपी एपीआई यहां काम नहीं करेगी क्योंकि मुझे बताया गया है कि इसका इस्तेमाल न करें।मैं io.ReadCloser से io.ReadSeeker पर कैसे जा सकता हूं?
S3 से एक वस्तु हो रही एक response.Body
कि एक io.ReadCloser
है और उस फ़ाइल को अपलोड करने के लिए पेलोड एक Body
कि एक io.ReadSeeker
है लेता है।
एकमात्र तरीका जिसे मैं समझ सकता हूं, response.Body
को फ़ाइल में सहेजकर io.ReadSeeker
के रूप में फ़ाइल को पास कर रहा है। इसके लिए पूरी फ़ाइल को डिस्क पर पहले लिखने की आवश्यकता होगी, फिर पूरी फ़ाइल को डिस्क से पढ़ना होगा जो बहुत गलत लगता है।
मुझे क्या करना चाहते हैं:
resp, _ := conn.GetObject(&s3.GetObjectInput{Key: "bla"})
conn.PutObject(&s3.PutObjectInput{Body: resp.Body}) // resp.Body is an io.ReadCloser and the field type expects an io.ReadSeeker
प्रश्न है, मैं कैसे संभव सबसे कारगर तरीका में एक io.ReadSeeker
के लिए एक io.ReadCloser
से जाते हैं?
आप किस विशिष्ट API और फ़ंक्शंस का उपयोग कर रहे हैं? मुझे उन कार्यों को नहीं मिल रहा है जिन्हें आप गो एस 3 एसडीके में संदर्भित कर रहे हैं। https://docs.aws.amazon.com/sdk-for-go/api/service/s3.html – BadZen
@ बैडज़ेन मैंने उन कॉल को जोड़ दिया है जिनका मैं उपयोग करूँगा। – Jeff
यह अजीब बात है कि आप प्रतिलिपि कार्यों का उपयोग नहीं कर सकते हैं - यही वह है जो वे वहां हैं। शायद उस पर वापस धक्का। डिस्क पर फ़ाइल लिखने के अलावा आपका एकमात्र अन्य विकल्प आपके 'io.ReadSeeker' अनुरोध अनुरोध पर GetObject() को फिर से जारी करने जा रहा है, और खोज की स्थिति से शुरू करने के लिए श्रेणी फ़ील्ड सेट कर रहा है। हालांकि, यह पहले से ही गलत लिखने-से-डिस्क की तुलना में एक खराब समाधान है। – BadZen