Seite 1 von 1

Flask Bilder Upload zu AWS3, Bilder vorm Upload resizen

Verfasst: Donnerstag 9. März 2017, 11:52
von Zoja
Hallo zusammen,

ich habe folgendes Problem:

In meiner APP ist es möglich Bilder hochzuladen, bis zu 15 Stück auf einmal. Nun ist hierbei die Größe der Bilder egal, d.h. wenn jedes Bild 1 MB hat müssen 15 MB hochgeladen werden oder wenn jedes Bild eine Auflösung von 5000 x 3000 hat, dann bleibt das so.

Dies führt dazu, dass der Upload manchmal sehr lange dauern kann, ich bin das Problem früher umgangen, indem ich den APP timeout im Procfile (App liegt auf Heroku) auf 120 Sekunden gesetzt habe und einen Ladebalken eingebaut habe.

Jedoch wäre die bessere Lösung die Bilder zu resizen bevor diese zu Amazon hochgeladen werden, dadurch sollte der Upload wesentlich schneller sein, oder?

Hier ist die Frage wie ist es am besten? Sollte man das mit Javascript machen oder mit Python PIL zum Beispiel? Oder wie wird das Problem grundsätzlich angegangen.

Danke!

Re: Flask Bilder Upload zu AWS3, Bilder vorm Upload resizen

Verfasst: Donnerstag 9. März 2017, 13:17
von BlackJack
@Zoja: Am einfachsten verbietet man solch grosse Bilder einfach und zwingt damit den Nutzer das selber vor dem Hochladen zu ändern. Das verhindert insgesamt Wartezeiten (im Programm) und die Übertragung von grossen Datenmengen.

Der zweite Ansatz ist das verkleinern beim Client. Dann werden nirgends grosse Datenmengen übertragen. Nachteil: Benötigt HTML5 Canvas und die File-API beim Client.

Ansonsten kann man natürlich den Benutzer erst einmal das grosse Bild einfach übertragen lassen und es dann auf dem Server runterskalieren. Nachteil: Zum Server werden grosse Datenmengen übertragen und der Server muss die dann runterskalieren.

Ich würde den Server aber auf jeden Fall gegen grosse Bilder absichern, also sowohl was die Datenmenge als auch die Höhe und Breite des Bilds angeht, um den Aufwand auf dem Server zu begrenzen und DoS-Angriffe auf den Server oder auch andere Clients zu bremsen.

Re: Flask Bilder Upload zu AWS3, Bilder vorm Upload resizen

Verfasst: Donnerstag 9. März 2017, 13:56
von Zoja
BlackJack hat geschrieben:@Zoja: Am einfachsten verbietet man solch grosse Bilder einfach und zwingt damit den Nutzer das selber vor dem Hochladen zu ändern. Das verhindert insgesamt Wartezeiten (im Programm) und die Übertragung von grossen Datenmengen.

Der zweite Ansatz ist das verkleinern beim Client. Dann werden nirgends grosse Datenmengen übertragen. Nachteil: Benötigt HTML5 Canvas und die File-API beim Client.

Ansonsten kann man natürlich den Benutzer erst einmal das grosse Bild einfach übertragen lassen und es dann auf dem Server runterskalieren. Nachteil: Zum Server werden grosse Datenmengen übertragen und der Server muss die dann runterskalieren.

Ich würde den Server aber auf jeden Fall gegen grosse Bilder absichern, also sowohl was die Datenmenge als auch die Höhe und Breite des Bilds angeht, um den Aufwand auf dem Server zu begrenzen und DoS-Angriffe auf den Server oder auch andere Clients zu bremsen.
Alles klar, vielen Dank für die Antwort!

Re: Flask Bilder Upload zu AWS3, Bilder vorm Upload resizen

Verfasst: Donnerstag 9. März 2017, 23:29
von DasIch
Der Upload hat keine Probleme, er ist das Problem. Du solltest die Uploads zu S3 direkt gehen lassen statt durch deine Anwendung, dann bist du diese Probleme los.

Re: Flask Bilder Upload zu AWS3, Bilder vorm Upload resizen

Verfasst: Freitag 10. März 2017, 09:08
von Zoja
DasIch hat geschrieben:Der Upload hat keine Probleme, er ist das Problem. Du solltest die Uploads zu S3 direkt gehen lassen statt durch deine Anwendung, dann bist du diese Probleme los.
d.h. mit JS direkt uploaden? Aber die files können immer noch sehr groß sein, würde der client dann nicht auch lange brauchen?

Re: Flask Bilder Upload zu AWS3, Bilder vorm Upload resizen

Verfasst: Freitag 10. März 2017, 09:47
von Sirius3
@Zoja: ein Javascript-Image-Resizer ist hier erklärt. Das verhindert aber nicht, dass jemand das Javascript umgeht und doch wieder direkt riesige Dateien hochlädt. Da hilft nur ein Größenlimit, das man am besten gleich den Webserver prüfen läßt, der dann gleich den Upload abbrechen kann.

Re: Flask Bilder Upload zu AWS3, Bilder vorm Upload resizen

Verfasst: Freitag 10. März 2017, 11:14
von BlackJack
Und nur noch mal das das nicht untergeht: Grösse prüfen heisst nicht nur Dateigrösse prüfen, sondern auch die Pixelabmessungen begrenzen. Sonst können immer noch Spassvögel kleine Dateien hochladen, mit komprimierten Grafikformaten die dann beim dekomprimieren aber absurde Ausmasse haben und beim Client den Speicher sprengen wenn der versucht die anzuzeigen.

Re: Flask Bilder Upload zu AWS3, Bilder vorm Upload resizen

Verfasst: Freitag 10. März 2017, 12:09
von Zoja
BlackJack hat geschrieben:Und nur noch mal das das nicht untergeht: Grösse prüfen heisst nicht nur Dateigrösse prüfen, sondern auch die Pixelabmessungen begrenzen. Sonst können immer noch Spassvögel kleine Dateien hochladen, mit komprimierten Grafikformaten die dann beim dekomprimieren aber absurde Ausmasse haben und beim Client den Speicher sprengen wenn der versucht die anzuzeigen.
Jep danke! prüfe erstmal die Größe mit:

Code: Alles auswählen

# rejects too big images - max 15 MB 
MAX_CONTENT_LENGTH = 15 * 1024 * 1024