【问题标题】:Using boto for S3 upload I'm getting a EOF error使用 boto 进行 S3 上传我收到 EOF 错误
【发布时间】:2012-11-01 18:43:21
【问题描述】:

我正在尝试将文件上传到 S3(实际上上传有效),但我的应用程序崩溃并抛出错误消息:

fp is at EOF. Use rewind option or seek() to data start.

我看到人们解决问题的一些方法是将rewind=True 添加到他们的 set_contents_from_string 调用中。但是,这会引发以下错误:

set_contents_from_string() got an unexpected keyword argument 'rewind'

以下是我views.py的内容。我做错了什么?

def store_in_s3(filename, filecontent):
    conn = S3Connection(settings.AWS_ACCESS_KEY_ID, settings.AWS_SECRET_ACCESS_KEY)
    b = conn.create_bucket('mybucket')
    mime = mimetypes.guess_type(filename)[0]
    k = Key(b)
    k.key = filename
    k.set_metadata("Content-Type", mime)
    k.set_contents_from_string(filecontent)
    #k.set_contents_from_string(filecontent, rewind=True)
    k.set_acl("public-read")

def add_m(request, points=None):
    mname = request.GET.get ('mname')
    format = request.GET.get ('format')
    type = request.GET.get ('type')
    if request.method == "POST":
        formtoaddm = spiceform(request.POST, request.FILES)
        if formtoaddm.is_valid():
            new_m = formtoaddm.save(commit=False)
            new_m.adder = request.user
            mname = new_m.mname
            file = request.FILES['content']
            filename = file.name
            filecontent = file.read()
            store_in_s3(filename, filecontent)
            ...

【问题讨论】:

  • 好的,我想我在阅读后通过添加:file.seek(0) 修复了它。但我不确定为什么。有人能解释一下吗?
  • file.seek(0) 将读取光标放回文件的开头,这样您就可以再次执行 file.read() 并再次获取所有内容。
  • 您是否尝试过取消注释这一行:#k.set_contents_from_string(filecontent, rewind=True) ?

标签: django amazon-s3 boto


【解决方案1】:

之后

filecontent = file.read()

放:

file.seek(0)

【讨论】:

    【解决方案2】:

    见最后评论here。假设您使用的是 Django-Storages,只需升级到最新版本即可解决此问题。

    【讨论】:

      猜你喜欢
      • 2013-03-23
      • 1970-01-01
      • 2014-10-12
      • 2017-08-18
      • 1970-01-01
      • 2012-09-02
      • 1970-01-01
      • 2014-12-16
      • 1970-01-01
      相关资源
      最近更新 更多