我花了一些时间对此进行试验,这就是我所发现的。
>>> import boto
>>> c =boto.connect_s3()
>>> fp = open('myfiletoupload.txt')
>>> content_length = len(fp.read())
>>> c.generate_url(300, 'PUT', 'test-1332789015', 'foobar', headers={'Content-Length': str(content_length)}, force_http=True)
'http://test-1332789015.s3.amazonaws.com/foobar?Signature=oUARG45mR95utXsiQYRJNiCI4x4%3D&Expires=1333731456&AWSAccessKeyId=AKIAJOTCCJRP4C3NSMYA&Content-Length=16'
然后,我可以使用curl将文件放置到该URL上,如下所示:
$ curl --request PUT --upload-file myfiletoupload.txt "http://test-1332789015.s3.amazonaws.com/foobar?Signature=oUARG45mR95utXsiQYRJNiCI4x4%3D&Expires=1333731456&AWSAccessKeyId=AKIAJOTCCJRP4C3NSMYA&Content-Length=16"
这导致文件被上传到存储桶。因此,似乎有可能。您可能想看看是否可以计算content- md5值并将其包含在标头中,但是您还必须弄清楚如何获取curl来发送该标头。另外,您应该能够通过HTTPS而不是HTTP进行这项工作,但是我还没有尝试过。