파일을 S3에 업로드하는 웹 사이트를 heroku에 만들었습니다.
heroku에 웹 앱을 구축하는 방법은 아래를 참조하십시오.
twilio와 SendGrid와 heroku에서 경력 메일 대체 푸시 알림
heroku에서 flask 앱을 실행하기 위한 환경 변수 설정
(venv)$heroku config:set FLASK_APP=upload.py
(venv)$heroku config:set FLASK_CONFIG=heroku
AWS S3에 액세스하기 위한 환경 변수 설정
S3의 버킷 이름과 IAM에서 사용자를 만들고 security credentials로 만든 access key
(venv)$heroku config:set S3BUCKET=S3バケット名
(venv)$heroku config:set AWS_ACCESS_KEY_ID=xxxxxxxxxxxxxxxxxxxx
(venv)$heroku config:set AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
웹 페이지의 기본 인증 암호를 환경 변수로 설정
사용자 이름은 소스 코드에 묻혀 (사용자)
(venv)$heroku config:set USER_PW=xxxxxxxx
소스 코드 등
requirements.txt
boto==2.49.0
Click==7.0
Flask==1.1.1
Flask-HTTPAuth==3.3.0
gunicorn==19.9.0
itsdangerous==1.1.0
Jinja2==2.10.3
MarkupSafe==1.1.1
Werkzeug==0.16.0
Procfile
web: gunicorn upload:app --timeout 15 --keep-alive 5 --log-level debug
소스 코드
upload.py
from flask import Flask, render_template, request, jsonify
from werkzeug import secure_filename
from flask_httpauth import HTTPDigestAuth
import boto
import os
'''
アプリコンストラクタ
'''
app = Flask(__name__)
app.config['SECRET_KEY'] = 'hard to guess string'
'''
Digest認証
'''
auth = HTTPDigestAuth()
users = {
"user": os.environ.get('USER_PW')
}
@auth.get_password
def get_password(username):
if username in users:
return users.get(username)
return False
@auth.error_handler
def auth_error():
response = jsonify({'error': 'unauthorized', 'message': 'Invalid credentials'}
)
response.status_code = 401
return response
'''
View設定
'''
@app.route('/upload')
@auth.login_required
def upload():
return render_template('upload.html')
@app.route('/uploader', methods = ['GET', 'POST'])
def uploader():
if request.method == 'POST':
aws_access_key = os.environ.get('AWS_ACCESS_KEY_ID')
aws_secret_access_key = os.environ.get('AWS_SECRET_ACCESS_KEY')
s3bucket = os.environ.get('S3BUCKET')
f = request.files['file']
s3 = boto.connect_s3(aws_access_key, aws_secret_access_key)
bucket = s3.get_bucket(s3bucket)
key = bucket.new_key(secure_filename(f.filename))
key.set_contents_from_file(f)
return 'file uploaded successfully'
if __name__ == '__main__':
app.run(host='0.0.0.0', debug=True)
웹 페이지 템플릿
templates/upload.html
<html>
<body>
<form action = "/uploader" method = "POST" enctype = "multipart/form-data">
<input type = "file" name = "file" />
<input type = "submit"/>
</form>
</body>
</html>
업로드
예를 들어 iPhone에서 위에서 구축한
https://xxxxxxx-xxxxxx-xxxxxx.herokuapp.com/upload
에 액세스하면 아래 왼쪽과 같이 인증하고 오른쪽(Choose File을 누른 후)과 같은 간단한 화면에서 파일을 선택하여 업로드할 수 있다.로컬 서버에서 s3 마운트
위 웹 페이지에서 던진 파일을 s3fs로 로컬로 마운트할 수 있다.
sudo s3fs s3バケット名 /home/pi/s3fs_from/ -o allow_other -o uid=1000 -o gid=1000
Reference
이 문제에 관하여(파일을 S3에 업로드하는 웹 사이트를 heroku에 만들었습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kamotsuru/items/dbfe8914ca286f4d11c7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)