If you can't get away with a static file on your webserver you will
probably have to base64 encode the data before you store it in the
database and then unbase64 encode when you get it out.

On Feb 8, 1:30 am, "schnuer.com" <[EMAIL PROTECTED]> wrote:
> Hi,
> Thanks for the tips and i've been trying different approaches all day and
> reading lots of docs with varying success. Now i can get my file and all but
> i still cant get it into the database. Here follows the code and the trace,
> the code is not pretty yet but i just wanted it to work since i need to get
> finished with this, this has held me up since Sunday.
>
> Thank you for your help,
> Fabian
>
> ============================================================================
> =======
> CODE
> ============================================================================
> =======
>
>     def upload_handler(self, imageObject, image1, image2, image3, image4,
> image5, **kw):
>         """ Do something with form values and re-show the upload form. """
>
>         # Tell UploadFilter that this transfer is done.
>         try:
>             del
> cherrypy.file_transfers[cherrypy.request.remote_addr][image1.filename]
>             del
> cherrypy.file_transfers[cherrypy.request.remote_addr][image2.filename]
>             del
> cherrypy.file_transfers[cherrypy.request.remote_addr][image3.filename]
>             del
> cherrypy.file_transfers[cherrypy.request.remote_addr][image4.filename]
>             del
> cherrypy.file_transfers[cherrypy.request.remote_addr][image5.filename]
>         except KeyError:
>             pass
>
>         # Save any files that were uploaded (ignoring empty form fields)
>         tmpdir = os.path.join(os.getcwd(), "tempfiles")
>         if len(image1.filename) > 0:
>             img = image1.file
>             img.seek(0)
>             chunk_size = 8192
>             tmpdir = os.path.join(os.getcwd(), "tempfiles")
>             newFile = open(os.path.join(tmpdir, image1.filename), "wb")
>             # save data to this new file in chunks
>             while True:
>                 data = img.read(chunk_size)
>                 if not data:
>                     break
>                 newFile.write(data)
>             self.pre_process_image(os.path.join(tmpdir, image1.filename),
> imageObject)
>         if len(image2.filename) > 0:
>             pass
>         if len(image3.filename) > 0:
>             pass
>         if len(image4.filename) > 0:
>             pass
>         if len(image5.filename) > 0:
>             pass
>
>         # Re-show the upload form, with a nice little message
>         flash("The files were uploaded.")
>         raise redirect('/modify/images/'+imageObject)
>
>     def pre_process_image(self, savedfile, imageObject):
>         if self.is_valid_image(savedfile):
>             # create file entry in database
>             newImage = image(imageName = None,
>                              imageDescription = None,
>                              imagePoints = None,
>                              imageComplete = False,
>                              imageMap = False,
>                              imageMapPoint = False,
>                              imageFile = open(savedfile),
>                              imageThumb = None,
> #open(self.make_thumbnail(savedfile)),
>                              imageObject = int(imageObject),
>                              imageSpace = None,
>                              imageFormat = 1)
>             return
>         else:
>             return False
>
>     def is_valid_image(self, savedfile):
>         try:
>             im = Image.open(savedfile)
>         except:
>             return False
>         return True
>
>     def make_thumbnail(self, savedfile):
>         pass
>
> ============================================================================
> =======
> TRACE
> ============================================================================
> =======
>
> Page handler: <function _wrapper at 0xb717180c>
> Traceback (most recent call last):
>   File
> "/usr/lib/python2.4/site-packages/CherryPy-2.2.1-py2.4.egg/cherrypy/_cphttpt
> ools.py", line 105, in _run
>     self.main()
>   File
> "/usr/lib/python2.4/site-packages/CherryPy-2.2.1-py2.4.egg/cherrypy/_cphttpt
> ools.py", line 254, in main
>     body = page_handler(*virtual_path, **self.params)
>   File
> "/usr/lib/python2.4/site-packages/TurboGears-1.0.1-py2.4.egg/turbogears/iden
> tity/conditions.py", line 275, in _wrapper
>     return fn( *args, **kw )
>   File "<string>", line 3, in upload_handler
>   File
> "/usr/lib/python2.4/site-packages/TurboGears-1.0.1-py2.4.egg/turbogears/cont
> rollers.py", line 334, in expose
>     output = database.run_with_transaction(
>   File "<string>", line 5, in run_with_transaction
>   File
> "/usr/lib/python2.4/site-packages/TurboGears-1.0.1-py2.4.egg/turbogears/data
> base.py", line 302, in so_rwt
>     retval = func(*args, **kw)
>   File "<string>", line 5, in _expose
>   File
> "/usr/lib/python2.4/site-packages/TurboGears-1.0.1-py2.4.egg/turbogears/cont
> rollers.py", line 351, in <lambda>
>     mapping, fragment, args, kw)))
>   File
> "/usr/lib/python2.4/site-packages/TurboGears-1.0.1-py2.4.egg/turbogears/cont
> rollers.py", line 378, in _execute_func
>     output = errorhandling.try_call(func, *args, **kw)
>   File
> "/usr/lib/python2.4/site-packages/TurboGears-1.0.1-py2.4.egg/turbogears/erro
> rhandling.py", line 73, in try_call
>     return func(self, *args, **kw)
>   File
> "/files/projects/3001_IC/dev/fabian/workingCopy/test_app/subcontrollers/imag
> es.py", line 108, in upload_handler
>     self.pre_process_image(os.path.join(tmpdir, image1.filename),
> imageObject)
>   File
> "/files/projects/3001_IC/dev/fabian/workingCopy/test_app/subcontrollers/imag
> es.py", line 149, in pre_process_image
>     imageFormat = 1)
>   File
> "/usr/lib/python2.4/site-packages/SQLObject-0.7.2-py2.4.egg/sqlobject/declar
> ative.py", line 93, in _wrapper
>     return fn(self, *args, **kwargs)
>   File
> "/usr/lib/python2.4/site-packages/SQLObject-0.7.2-py2.4.egg/sqlobject/main.p
> y", line 1203, in __init__
>     self._create(id, **kw)
>   File
> "/usr/lib/python2.4/site-packages/SQLObject-0.7.2-py2.4.egg/sqlobject/main.p
> y", line 1227, in _create
>     self.set(**kw)
>   File
> "/usr/lib/python2.4/site-packages/SQLObject-0.7.2-py2.4.egg/sqlobject/main.p
> y", line 1086, in set
>     kw[name] = dbValue = from_python(value, self._SO_validatorState)
>   File
> "/usr/lib/python2.4/site-packages/FormEncode-0.6-py2.4.egg/formencode/api.py
> ", line 356, in from_python
>     value = self._from_python(value, state)
>   File
> "/usr/lib/python2.4/site-packages/FormEncode-0.6-py2.4.egg/formencode/compou
> nd.py", line 61, in _from_python
>     from_python)
>   File
> "/usr/lib/python2.4/site-packages/FormEncode-0.6-py2.4.egg/formencode/compou
> nd.py", line 118, in attempt_convert
>     value = validate(validator, value, state)
>   File
> "/usr/lib/python2.4/site-packages/FormEncode-0.6-py2.4.egg/formencode/compou
> nd.py", line 18, in from_python
>     return validator.from_python(value, state)
>   File
> "/usr/lib/python2.4/site-packages/SQLObject-0.7.2-py2.4.egg/sqlobject/col.py
> ", line 1229, in from_python
>     binary = state.soObject._connection.createBinary(value)
>   File
> "/usr/lib/python2.4/site-packages/SQLObject-0.7.2-py2.4.egg/sqlobject/dbconn
> ection.py", line 558, in createBinary
>     return self.module.Binary(value)
>   File "/usr/lib/python2.4/site-packages/MySQLdb/__init__.py", line 61, in
> Binary
>     return array('c', x)
> TypeError: array item must be char
>
> -----Original Message-----
> From: [email protected] [mailto:[EMAIL PROTECTED] On
>
> Behalf Of Michael Robellard
> Sent: 07 February 2007 21:16
> To: TurboGears
> Subject: [TurboGears] Re: Getting images into and out of a database...been
> banging my head against a wall for two days now
>
> First of all Your form needs to have its enctype="multipart/form-data"
>
> In your function for page in your controller you'll have a paramter with the
> same name as the name of the file input tag on your form.
> That parameter is an object with .file and .filename
>
> You could have something like this in your code def upload(self, file=None)
> fd = open(file.filename, 'w') shutil.copyfileobj(file.file, fd)
> fd.close()
>
> The .file object is a standard Python file like object and can be used like
> that
>
> On Feb 7, 12:18 pm, "Fabian" <[EMAIL PROTECTED]> wrote:
> > Hello,
> > I've had nothing but problems getting this to work so i'll just
> > describe what i want to do and maybe someone here could help me out:
>
> > 1) Get images uploaded via the method describe in the upload with
> > progressbar tutorial in the rough-docs
> > 2) write image into a StringIO or similar
> > 3) write a copy into the database
> > 4) make a thumbnail via PIL
> > 5) save thumbnail into database
>
> > Now so far i've been getting nothing but errors so i think i've been
> > on the wrong track. Could someone just quickly list what objects to
> > use in this process is StringIO the way to go? The code is here below.
> > imageObject is just an Int. I've been getting decoding errors about
> > character not being in ascii range which i assume is because it tries
> > to decode the stringIO object, how do i tell it that it contains
> > binary data?
>
> > Thanks a lot
> > Fabian
>
> >     def save_file(self, filepath, file, imageObject):
> >         """ Safely save a file to the location given by filepath """
> >         chunk_size = 8192
> >         # return if file is empty
> >         if not file:
> >             return
> >         #read file that is being uploaded into a memory file
> >         # create new file on file system
> >         savedfile = StringIO.StringIO()
> >         # save data to this new file in chunks
> >         while True:
> >             data = file.read(chunk_size)
> >             if not data:
> >                 break
> >             savedfile.write(data)
>
> >         savedfile.seek(0)
>
> >         #create thumbnail
> >         tempThumb = Image.open(savedfile)
> >         tempThumb = tempThumb.resize((128, 128))
> >         fileOut = StringIO.StringIO()
> >         fileOut.seek(0)
> >         savedfile.seek(0)
> >         tempThumb.save(fileOut, 'PNG')
>
> >         # create file entry in database
> >         newImage = image(imageName = None,
> >                          imageDescription = None,
> >                          imagePoints = None,
> >                          imageComplete = False,
> >                          imageMap = False,
> >                          imageMapPoint = False,
>
> ...
>
> read more ยป


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"TurboGears" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/turbogears?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to