Προς το περιεχόμενο

handling images in django


Προτεινόμενες αναρτήσεις

Δημοσ.

καλησπέρα 

 

έχω κάνει ένα demo site σε django στο οποίο με την βοήθεια imagekit παίρνω μια εικόνα από έναν χρήστη μεσώ django form την κάνω διάφορα πράγματα( όχι πονηρά ) και δίνω πίσω στον χρήστη κάτι αποτελέσματα και όλα καλά.Το θέμα είναι ότι αυτή η εικόνα αποθηκεύετε στον server μου σε μια διεύθυνση media_root μπλα μπλα μπλα.

Αν δεν θέλω να την αποθηκεύσω και θέλω να δουλέψω on the fly μπορώ με το django ?

δλδ να πάρω την εικόνα με ένα request να την κάνω το processing που θέλω να δώσω τα αποτελέσματα χωρίς να αποθηκευτεί κάπου η εικόνα ή έστω να αποθηκευτεί κάπου προσωρινά.

Δοκίμασα κάτι με το base64 άλλα χωρίς τα αναμενόμενα αποτελέσματα. 

Το πρόβλημα μου έχει λυθεί,απλώς ρωτάω για τελείως  εγκυκλοπαιδικές γνώσεις να μάθω περισσότερα σαν αρχάριος που είμαι. 

Δημοσ.

@nilosgr οτιδηποτε και @Predatorkill και χωρις jacascript γινετε...

 

επισυναπτω καποια σχετικα link :

 

https://docs.djangoproject.com/en/1.10/topics/http/file-uploads/

 

https://docs.djangoproject.com/en/1.11/_modules/django/core/files/uploadhandler/

 

http://www.rkblog.rk.edu.pl/w/p/temporary-files-django-tests-and-fly-file-manipulation/

Δημοσ.

Χωρις να ξερω python και συμπερασματικα απο τον λιγο κωδικα που διαβασα, αμα ο σερβερ σου εχει πολλα GB RAM τοτε οκ, αλλα σκεψου 100 χρηστες να ανεβαζουν ενα αρχειο 5ΜΒ πχ και αυτο να αποθηκευεται στη μνημη για να κανεις το onthefly. Αν το παρεις αναλογικα καποια στιγμη ισως γονατισει ο σερβερ.

 

Αν καταλαβα λαθος ριξε μου ακυρο.

Δημοσ.

Εν γένει, όταν έχεις να κάνεις υπολογισμούς καλό είναι να τους κάνεις σε διαφορετικό process από αυτό που κάνει handle το το ίδιο request. Συνηθισμένες λύσεις είναι πχ το Celery και το RabbitMQ (προσωπικά προτιμώ rabbitmq).

 

Τα πλεονεκτήματα είναι πολλά με αυτό το design. Μπορείς να πετύχεις καλύτερο scaling και να κάνεις οικονομία στα έξοδα hosting αλλά θέλει περισσότερη δουλειά και στο development και στο deployment γιατί θέλει να ενώσεις διάφορα components.

 

Θα σου πρότεινα να διαβάσεις λίγο για Message Queues και αν έχεις και το χρόνο υλοποίησε κανένα απλό παράδειγμα. Είναι μια τεχνολογία την οποία αξίζει να ξέρεις.

https://www.cloudamqp.com/blog/2015-05-18-part1-rabbitmq-for-beginners-what-is-rabbitmq.html

https://www.quora.com/When-would-you-use-RabbitMQ

  • Like 2
Δημοσ.

@Predatorkil δυστυχως οι εικονες πιθανων να ειναι κ μεγαλυτερες απο 200 mb.

 @pmav99 έχει δίκιο @Predatorkill για την RAM θα έχω πρόβλημα ?σε περίπτωσή που ανεβάζουν πολλοί ταυτόχρονα ?

δείτε λίγο την προσπάθεια με το base64.

 

views.py

def convert_to_base64(image_file):
    base64_string = base64.encodestring(image_file)
    return "data:image/png;base64,"+base64_string
@csrf_exempt
def index(request):
    form = ImageUploadForm(request.POST or None, request.FILES or None)
    if request.method == "POST" and form.is_valid():
        image_file = request.FILES['image'].read()
        #base64_string = convert_to_base64(image_file)
        #file = base64_string.decode('utf8')
        #file_like = cStringIO.StringIO(image_file)
        return render_to_response("blog/success.html", {"image_file":image_file})
    return render_to_response('blog/calc.html', {'form': form}, RequestContext(request))

οπου εχω # ειναι διαφορες δοκιμες για την ιστορια μπορεσα να κανω display την εικονα αλλα δεν μπορεσω να την εισαγω στο processing μου,την μια μου εμφανιζε not a string και την αλλη AttributeError at / 'NoneType' object has no attribute 'GetRasterBand'.και στο command line εμφανίζετε αυτό το μήνυμα :

AIAAgACAAIAAgACAAIAAgACAAIAAgACA
AIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAA
gACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACA
AIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAA
με πάρα πολλές γραμμές ακόμα.
 
θα διαβασω αυτα που μου ειπες @pmav99
Δημοσ.

1. Καθαρά από UI perspective, εσύ όταν μπαίνεις σε μια ιστοσελίδα πόσα δευτερόλεπτα περιμένεις μέχρι να φορτώσει πριν την κλείσεις;

2. 10 λεπτά είναι υπερβολικά πολύς χρόνος. Θα έχει κάνει timeout ο server πολύ πιο πριν εκτός και αν χρησιμοποιείς web sockets ή κάτι τέτοιο.

 

> τα Message Queues  σε τι ακριβως θα με βοηθησουν ?

 

Στο πρώτο link που σου έδωσα:

 

 

In this guide, we follow a scenario where a web application allows users to upload information to a web site. The site will handle this information and generate a PDF and email it back to the user. Handling the information, generating the PDF and sending the email will in this example case take several seconds and that is one of the reasons of why a message queue will be used.

Δημοσ.

αφού είναι πολύ χρόνος τι πρωτινής ?απο url οπως πχ dropbox μπορώ να πάρω εικόνες ή ειναι μεγαλη και δυσκολη διεργασια ?γιατι το dropbox πχ εχει authentication.

Δημοσ. (επεξεργασμένο)

Αν και δεν έχουμε όλη την εικόνα, anyway, χονδροειδώς, μια πιθανή προσέγγιση είναι κάπως έτσι:

 

Στο Django 2 views. Ένα στο οποίο ο χρήστης ανεβάζει την εικόνα και ένα στο οποίο βλέπει τα αποτελέσματα.

 

Στο rabbitmq θα έχεις ένα queue για την επεξεργασία των εικόνων. Πιθανά να χρειαστείς και περισσότερα για πχ αποστολή email αλλά αυτό εξαρτάται από το τι θα χρησιμοποιήσεις.

 

Κάθε φορά που ο χρήστης κάνει POST στο view που έχει την φόρμα για το ανέβασμα της εικόνας (ή του URL), προσθέτεις την εικόνα του στο queue επεξεργασίας και του επιστρέφεις ένα μήνυμα ότι θα ειδοποιηθεί με email/SMS/whatever μόλις η επεξεργασία της εικόνας τελειώσει.

 

Στον process που γίνονται consume τα μηνύματα του queue (μπορεί να είναι στον ίδιο server που τρέχει το django, δεν είναι ανάγκη να είναι διαφορετικός), κάθε φορά που τελειώνει η επεξεργασία μιας εικόνας, αποθηκεύεις τα αποτελέσματα για να μπορείς να τα εμφανίσεις στο αντίστοιχο view και στέλνεις ειδοποίηση στον χρήστη ότι τα αποτελέσματα είναι έτοιμα.

Επεξ/σία από pmav99
  • Like 2

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...