0

突然、ファイルをS3にアップロードすると、0バイトとしてアップロードされます。

以前は正常に機能していたので、なぜこれが突然発生するのかわかりません。これが私のコードです:

def store_in_s3_avatar(pathtofile, avatarimage, filename, user):
    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 = "/media/avatars/%s/%s" % (user,filename)
    k.set_metadata("Content-Type", mime)
    k.set_contents_from_string(avatarimage)
    k.set_acl("public-read")
    return pathtofile

この関数を呼び出すviews.pyスニペットは次のとおりです。

 if request.method == "POST":
        updated = False
        if 'avatar' in request.FILES:
            path = avatar_file_path(user=request.user, 
                filename=request.FILES['avatar'].name)
            avatar = Avatar(
                user = request.user,
                primary = True,
                avatar = path,
            )
            new_file = avatar.avatar.storage.save(path, request.FILES['avatar'])
            avatarcontent = request.FILES['avatar']
            filename = request.FILES['avatar'].name
            avatarimage = avatarcontent.read()
            user=request.user
            avatar.avatar = store_in_s3_avatar(path, avatarimage, filename, user)
            avatar.save()
            ...
4

1 に答える 1

1

あなたが説明している動作に基づいて、storage.save()関数を明示的に呼び出しただけなので、ファイルポインターが最後にあるに違いありません。ファイルを 2 回読み取っても、何も得られません。

f = StringIO.StringIO('foobar')
f.read() # out 'foobar'
f.read() # out ''
f.seek(0) 
f.read() # out 'foobar'
于 2012-11-04T19:32:27.933 に答える