P Raju
P Raju

Reputation: 339

Open file to read from web form

I am working on a project where I have to upload a file from file storage (via web form) to MongoDB. In order to achieve this, I need to open the file in "rb" mode, then encode the file and finally upload to MongoDb. I am stuck when opening the file "rb" mode.

    if form.validate():
        for inFile in request.files.getlist("file"):

            connection = pymongo.MongoClient()
            db = connection.test
            uploads = db.uploads

            with open(inFile, "rb") as fin:
                f = fin.read()
                encoded = Binary(f,0)

                try:
                    uploads.insert({"binFile": encoded})
                    check = True
                except Exception as e:
                    self.errorList.append("Document upload is unsuccessful"+e)
                    check = False

The above code is throwing TypeError: coercing to Unicode: need string or buffer, FileStorage found in the open step, i.e. this line:

with open(inFile, "rb") as fin:

Is there a way I can change my code to make it work?

Thanks in advance

Upvotes: 1

Views: 785

Answers (1)

dkasak
dkasak

Reputation: 2703

The FileStorage object is already file-like so you can use as a file. You don't need to use open on it, just call inFile.read().

If this doesn't work for you for some reason, you can save the file to disk first using inFile.save() and open it from there.


Reference: http://werkzeug.pocoo.org/docs/0.11/datastructures/#werkzeug.datastructures.FileStorage

Upvotes: 1

Related Questions