This is the code that handles the uploading request:
@app.route('/upload', methods=['POST'])
def upload():
if request.method == 'POST':
test = request
data_file = request.files.get('file')
file_name = data_file.filename
conn = S3Connection(settings.ACCESS_KEY, settings.SECRET_KEY)
bucket = conn.get_bucket(settings.BUCKET_NAME)
k = Key(bucket)
k.key = 'file_test.jpg'
# k.set_contents_from_file(data_file)
k.set_contents_from_string(data_file.readlines())
# return jsonify(name=file_name)
return jsonify(name=file_name)
I've tried 3 options:
k.set_contents_from_string(data_file.readlines())
k.set_contents_from_file(data_file)
k.set_contents_from_stream(data_file.readlines())
So what is the right way to upload files to amazon s3?
Here is a fully-functioning example of how to upload multiple files to Amazon S3 using an HTML file input tag, Python, Flask and Boto.'
The main keys to making this work are Flask's request.files.getlist
and Boto's set_contents_from_string
.
Some tips:
In your code in the following line:
k.set_contents_from_string(data_file.readlines())
you're sending a list
of strings (terminated by newlines!) to Amazon instead of the file content as is.
You need to pass a single str
object with the file contents:
set_contents_from_string(data_file.read())
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.