Чтобы загрузить файлы с S3 с помощью Flask, я использую следующий код:
@app.route('/downloads3', methods=['GET','POST'])
def download_s3():
if not google.authorized:
return redirect(url_for("google.login"))
resp = google.get("/oauth2/v2/userinfo")
tekst = resp.text
user_data = json.loads(tekst)
user_id = user_data['id']
s3 = boto3.resource('s3')
fileid = request.form.get('file_id')
try:
s3.Bucket(user_id).download_file(str(fileid),current_app.root_path(str(fileid)))
return 'gedownload'
except botocore.exceptions.ClientError as e:
if e.response['Error']['Code'] == "404":
print("The object does not exist.")
else:
raise
return redirect('/s3')
Файл загружается на сервер, но я хочу, чтобы вместо этого файл загружался на клиент.
@DanielRoseman, вы правы, я отредактировал свой вопрос. Вы знаете, как я могу заставить его работать с Flask для потоковой передачи файла клиенту? Я использовал следующую документацию Boto3: boto3.amazonaws.com/v1/documentation/api/latest/guide/…






Этот код совсем не делает того, что вы хотите. Он загружает его на сервер, а не на клиент. Пока вы находитесь в разработке, это одна и та же машина, но после развертывания в производственной среде она вообще не будет загружаться на машину пользователя. Вместо этого вам нужно передать файл пользователю и вернуть этот поток в ответ.