मैं Google ऐप इंजन (पायथन) पर एक सेवा बनाना चाहता हूं जो एक छवि का यूआरएल प्राप्त करेगा और इसे Google संग्रहण पर संग्रहीत करेगा। मैं boto
या gsutil
कमांड लाइन का उपयोग कर स्थानीय फ़ाइल से अपलोड करने में कामयाब रहा, लेकिन यूआरएल के माध्यम से फाइल को पुनः प्राप्त नहीं कर पाया। मैंने HTTP requests (PUT
) का उपयोग करके इसे करने का प्रयास किया और मुझे गलत हस्ताक्षर के लिए त्रुटि प्रतिक्रियाएं मिल रही हैं। जाहिर है, मैं कुछ गलत कर रहा हूं, लेकिन दुर्भाग्य से मुझे पता नहीं है कि कहां है।Google App Engine पर URL से Google संग्रहण पर फ़ाइल कैसे संग्रहीत कर सकते हैं?
तो मेरा सवाल यह है कि: मैं एक यूआरएल से एक फाइल कैसे प्राप्त कर सकता हूं और इसे Google ऐप एंजिन के लिए पाइथन का उपयोग करके Google संग्रहण पर संग्रहीत कर सकता हूं?
यहाँ मैं क्या किया है (का उपयोग करते हुए एक और answer) है:
class ImportPhoto(webapp.RequestHandler):
def get(self):
self.response.headers['Content-Type'] = 'text/plain'
srow = self.response.out.write
url = self.request.get('url')
srow('URL: %s\n' % (url))
image_response = urlfetch.fetch(url)
m = md5.md5()
m.update(image_response.content)
hash = m.hexdigest()
time = "%s" % datetime.utcnow().strftime("%a, %d %b %Y %H:%M:%S GMT")
str_to_sig = "PUT\n" + hash + "\n\n" +
time + "\nx-goog-acl:public-read\n/lipis/8418.png"
sig = base64.b64encode(hmac.new(
config_credentials.GS_SECRET_ACCESS_KEY,
str_to_sig, hashlib.sha1).digest())
total = len(image_response.content)
srow('Size: %d bytes\n' % (total))
header = {"Date": time,
"x-goog-acl": "public-read",
"Content-MD5": hash,
'Content-Length': total,
'Authorization': "GOOG1 %s:%s" %
(config_credentials.GS_ACCESS_KEY_ID, sig)}
conn = httplib.HTTPConnection("lipis.commondatastorage.googleapis.com")
conn.set_debuglevel(2)
conn.putrequest('PUT', "/8418.png")
for h in header:
conn.putheader(h, header[h])
conn.endheaders()
conn.send(image_response.content + '\r\n')
res = conn.getresponse()
srow('\n\n%d: %s\n' % (res.status, res.reason))
data = res.read()
srow(data)
conn.close()
और मैं एक प्रतिक्रिया के रूप हो रही है:
URL: https://stackoverflow.com/users/flair/8418.png
Size: 9605 bytes
400: Bad Request
<?xml version='1.0' encoding='UTF-8'?><Error><Code>BadDigest</Code><Message>The Content-MD5 you specified did not match what we received.</Message><Details>lipis/hello.jpg</Details></Error>
क्या आप कुछ कोड पोस्ट कर सकते हैं जो पीओयू और सर्वर उत्तर देता है? –
@ पीटर Knego मैंने अपना जवाब अपडेट किया। – Lipis