Flask AttributeError:'unicode'对象没有属性'tell'

时间:2014-03-11 21:25:18

标签: python amazon-web-services amazon-s3 flask flask-wtforms

我正在尝试使用Flask应用程序将图像上传到Amazon S3,并将密钥和元数据存储在Redis数据库中。这是我的应用程序:

def s3upload(image, acl='public-read'):
    key = app.config['S3_KEY']
    secret = app.config['S3_SECRET']
    bucket = app.config['S3_BUCKET']

    conn = S3Connection(key, secret)
    mybucket = conn.get_bucket(bucket)

    r = redis.StrictRedis(connection_pool = pool)
    iid = r.incr('image')
    now = time.time()
    r.zadd('image:created_on', now, iid)


    k = Key(mybucket)
    k.key = iid
    k.set_contents_from_file(image)

    return iid

@app.route('/', methods = ['GET', 'POST'])
def index():
    form = ImageForm(request.form)
    print 'CHECKING REQUEST'
    if form.validate_on_submit():
        print 'VALID REQUEST'
        image = form.image.data
        s3upload(image)
    else:
        image = None

    r = redis.StrictRedis(connection_pool = pool)
    last_ten = r.zrange('image:created_on', 0, 9)
    print last_ten
    images = []

    key = app.config['S3_KEY']
    secret = app.config['S3_SECRET']
    bucket = app.config['S3_BUCKET']

    conn = S3Connection(key, secret)
    mybucket = conn.get_bucket(bucket)  


    for image in last_ten:

        images.append(mybucket.get_key(image, validate = False))


    return render_template('index.html', form=form, images=images)

页面加载成功,但是当我尝试上传图片时,它会返回错误:

AttributeError: 'unicode' object has no attribute 'tell'

set_contents_from_file

失败的行是:spos = fp.tell()

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

k.set_contents_from_file期望一个类似文件的对象,其方法名为tell(),你传递一个unicode字符串。

您需要改为使用k.set_contents_from_string