当前位置: 首页 > 面试题库 >

如何使用Boto库生成临时URL以将文件上传到Amazon S3?

周威
2023-03-14
问题内容

我知道如何以这种方式下载文件: key.generate_url(3600)

但是,当我尝试上传:时key.generate_url(3600, method='PUT'),该网址无效。有人告诉我: The request signature we calculated does not match the signature you provided. Check your key and signing method.

我无法在boto主页上找到有关如何使用该函数的示例代码generate_url(method='PUT')。这里有人知道如何使用它进行上传吗?如何设置上传文件路径的参数?


问题答案:

我花了一些时间对此进行试验,这就是我所发现的。

>>> 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进行这项工作,但是我还没有尝试过。



 类似资料:
  • 我想用Python在s3 bucket中复制一个文件。

  • 问题内容: 我在Python网络环境中工作,我可以使用boto的key.set_contents_from_filename(path / to / file)将文件从文件系统上传到S3。但是,我想上传已经在网络上的图像(例如https://pbs.twimg.com/media/A9h_htACIAAaCf6.jpg:large)。 我是否应该以某种方式将映像下载到文件系统,然后照常使用boto

  • 问题内容: 我想使用python复制s3存储桶中的文件。 例如:我的存储桶名称=测试。在存储桶中,我有2个文件夹名称为“ dump”和“ input”。现在,我想使用python将文件从本地目录复制到S3“转储”文件夹…有人可以帮助我吗? 问题答案: 尝试这个… [更新]我不是pythonist,所以感谢您对import语句的注意。另外,我不建议将凭证放在您自己的源代码中。如果您在AWS内部运行此

  • 问题内容: 我正在将文件从S3复制到Cloudfiles,并且我想避免将文件写入磁盘。Python- Cloudfiles库有一个object.stream()调用,看起来像我需要的,但我在boto中找不到等效的调用。我希望我能够做类似的事情: boto是否可以做到这一点(或者我猜想是否还有其他s3库)? 问题答案: boto中的Key对象代表S3中的对象,可以像迭代器一样使用,因此您应该可以执行

  • 我在dropbox示例中没有看到任何有用的上传。 你能帮帮我吗?我在用Angularjs。

  • 接口说明 上传文件(临时存放) 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 API地址 POST /wish3dearth/api/scene/v1.0.0/uploadTempFile 是否需要登录 是 请求字段说明 参数 类型 请求类型 是否必须 说明 token string header 是 当前登录用户的TOKEN sceneId stri