使用Boto通过代理服务器

时间:2016-11-22 01:32:52

标签: amazon-s3 flask boto

我有一个这个地址的文件:

http://s3.amazonaws.com/bucket-name/sdile_pr_2_1_1/pr/0/2/1/1/dile_0_2_1_1.nc

在s3桶中,我希望通过烧瓶应用程序访问。

这样做我创建了一个如下所示的函数:

@app.route('/select/dile')
def select_dile_by_uri():

    uri=request.args.get('uri')

    if uri is not None:
        if uri.startswith("http://s3.amazonaws.com/"):
            path        = uri.replace("http://s3.amazonaws.com/","")
            bname, kstr = path.split("/",1) # split the bname from the key string
            conn        = S3Connection(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)

            try:     
                bucket  = conn.get_bucket(bname)
            except:
                print "BUCKET NOT FOUND"
                return str("ERROR: bucket "+bname+" not found")
            else:
                print "BUCKET CONNECTED"
                try:
                    key = bucket.get_key(kstr)
                    print "KEY: ", key
                except:
                    print "KEY NOT FOUND"
                    return str("ERROR: key "+kstr+"not found")
                else:
                    try: 
                        key.open_read()                         # opens the file
                        headers = dict(key.resp.getheaders())   # request the headers
                        return Response(key, headers=headers)   # return a response                                  
                    except S3ResponseError as e:
                        return Response(e.body, status=e.status, headers=key.resp.getheaders()) 



    abort(400)

下载有效,但下载文件的名称似乎只是" dile"而不是dile_0_2_1_1.nc。

为什么?有什么我需要设置的吗?

1 个答案:

答案 0 :(得分:0)

我需要做的是在标题中添加一个字段,特别是:

headers["Content-Disposition"] = "inline; filename=myfilename"

其中-myfilename-是您希望文件具有的名称。