Python Flask Heroku Postgresql - Static Datei zu Amazon S3 mit Flaks-S3

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Zoja
User
Beiträge: 145
Registriert: Freitag 28. Februar 2014, 14:04

Hallo,

ich hab dank euch schon wieder sehr viele Fortschritte gemacht.

Habe meine Flask APP nun von sqlite auf postgtresql geändert und will bei heroku hochladen, jedoch werden bei heroku große Datenmängen nicht gespeichert, zumindest wird von denen vorgeschlagen Amazon S3 zu benutzen und die static Dateien in einem Bucket zu speichern.

Benutzer dürfen bei mir Bilder hochladen, in der DB wird nur der Pfad zum Bild gespeichert, ich speichere diese Bilder in einem static Ordner, der userimg heißt.

Nun wollte ich mit Hilfe von Flask-S3 die Bilder auf meinem Bucket bei Amazon S3 speichern.
Flask-S3: https://flask-s3.readthedocs.io/en/latest/

Ich habe alles befolgt und in meiner main.py folgenden Code eingefügt:

Code: Alles auswählen

s3 = FlaskS3(app)
s3.init_app(app)

Code: Alles auswählen

def upload_all():
    create_all(app, user=app.config['MY_AWS_ID'], password=app.config['MY_AWS_SECRET'], bucket_name=app.config['FLASKS3_BUCKET_NAME'])
in der config habe ich:

Code: Alles auswählen

FLASKS3_BUCKET_NAME = "My_Bucketname"
MY_AWS_ID = "My_ID"
MY_AWS_SECRET = "My_Secret_Key"
Jedoch verstehe ich nicht wo ich upload_all() benutzen soll. Flask-S3 soll ja jedes mal wenn es sich um den static ordner handelt, die uploads auf Amazon S3 umleiten.

Wenn ich upload_all hier benutze gibt es einen UnicodeError, der aber wie es scheint von dem Linknamen verursacht wird, der aber vom Flask-S3 package kommt?:

Code: Alles auswählen

if __name__ == "__main__":
    app.debug = True
    upload_all()
    app.run()
der Fehler:

Code: Alles auswählen

Traceback (most recent call last):
  File "C:\Users\User\Eclipse-Workspace\Monteurzimmer\main.py", line 685, in <module>
    upload_all()
  File "C:\Users\User\Eclipse-Workspace\Monteurzimmer\main.py", line 681, in upload_all
    create_all(app, user=app.config['MY_AWS_ID'], password=app.config['MY_AWS_SECRET'])
  File "C:\Python27\lib\site-packages\flask_s3.py", line 410, in create_all
    filepath_filter_regex=filepath_filter_regex)
  File "C:\Python27\lib\site-packages\flask_s3.py", line 177, in _gather_files
    dirs = [(six.u(app.static_folder), app.static_url_path)]
  File "C:\Python27\lib\site-packages\six.py", line 647, in u
    return unicode(s.replace(r'\\', r'\\\\'), "unicode_escape")
UnicodeDecodeError: 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape
Alternativ habe ich überlegt einfach meinen Upload Ordner in der Config zu verändern, brauche ich Flask-S3 überhaupt?
Von

Code: Alles auswählen

UPLOAD_FOLDER = "static/userimg/"
zu

Code: Alles auswählen

UPLOAD_FOLDER = 'http://My_Bucketname.aws.amazon.com/'
Das gab aber einen ähnlichen Fehler, ich schätze mal wegen den "//", da bin ich gerade dabei das zu beseitigen, dennoch würde ich gerne wissen was mit Flask-S3 los ist, oder vielleicht eine andere Möglichkeit an das Problem hernazutreten?

Code: Alles auswählen

IOError: [Errno 22] invalid mode ('wb') or filename: 'http://My_Bucketname.aws.amazon.com/best-western-atrium-zimmer01.jpg'
Wie immer vielen Dank!
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Zoja hat geschrieben:Das gab aber einen ähnlichen Fehler, ich schätze mal wegen den "//", da bin ich gerade dabei das zu beseitigen, dennoch würde ich gerne wissen was mit Flask-S3 los ist, oder vielleicht eine andere Möglichkeit an das Problem hernazutreten?

Code: Alles auswählen

IOError: [Errno 22] invalid mode ('wb') or filename: 'http://My_Bucketname.aws.amazon.com/best-western-atrium-zimmer01.jpg'
Der Fehler steht ja da, du versuchst eine Datei zu öffnen die via http Protokoll angegeben ist, das funktioniert nicht.

So wie ich Flask-S3 verstanden habe eignet sich das nicht für deinen Zweck, denn es ist rein zum Ausliefern von statischen Dateien gedacht, dynamischer upload und statische Dateien passt irgendwie nicht zusammen.

TinyS3 sieht für deinen Zweck brauchbar aus.
the more they change the more they stay the same
Zoja
User
Beiträge: 145
Registriert: Freitag 28. Februar 2014, 14:04

Dav1d hat geschrieben:
Zoja hat geschrieben:Das gab aber einen ähnlichen Fehler, ich schätze mal wegen den "//", da bin ich gerade dabei das zu beseitigen, dennoch würde ich gerne wissen was mit Flask-S3 los ist, oder vielleicht eine andere Möglichkeit an das Problem hernazutreten?

Code: Alles auswählen

IOError: [Errno 22] invalid mode ('wb') or filename: 'http://My_Bucketname.aws.amazon.com/best-western-atrium-zimmer01.jpg'
Der Fehler steht ja da, du versuchst eine Datei zu öffnen die via http Protokoll angegeben ist, das funktioniert nicht.

So wie ich Flask-S3 verstanden habe eignet sich das nicht für deinen Zweck, denn es ist rein zum Ausliefern von statischen Dateien gedacht, dynamischer upload und statische Dateien passt irgendwie nicht zusammen.

TinyS3 sieht für deinen Zweck brauchbar aus.
Vielen Dank, das sieht echt sehr gut aus!
Antworten